Mehr I/0 Pins am Arduino

Begonnen von BoIIe, 30 April 2017, 00:48:13

Vorheriges Thema - Nächstes Thema

BoIIe

Hallo und guten Abend zusammen.
Kurz zur Hardware. Ich habe fhem auf meinem Raspi laufen und daran hängt mein Arduino.
Ich bin eher der Kabel Fan und will so viel wie möglich über meinen Arduino kabel gebunden machen. Nur gehen mir irgendwann die IO Pins aus . Ich könnte einen Arduino mega nehmen aber der ist mir etwas zu klobig und die Pins sind doch auch begrenzt.
Nun gibt es ja die Möglichkeit seine Pins um 16 weitere mit dem mcp23017 zu erweitern. Davon kann der arduino über i2c 8 Stück verwalten. Das wären dann 126 weitere IO Pins.
Weiter habe ich gelesen das man mit einem i2c switch ,TCA9548 z.b., bis zu 8 weitere Adress Ebenen schaffen kann, an welchen man wieder nochmals je 8 mcp23017 hängen kann. Somit wäre ich laut Adam Riese bei theoretischen 1024 IO Pins.
Ist das denn Tatsächlich so ohne weiteres möglich und ist diese Basis noch über fhem steuer und auswertbar?
Vielen Dank schonmal.

BoIIe

Sodele mal ein kleines Update von mir. Ich habe es geschafft bisher 5 mcp 23017 über meinen Arduino (configurable firmata) über usb am Raspberry an fhem zu bringen. Ist zwar etwas komplizierter für mich als Anfänger aber es geht. Ich kann jetzt auch über schalter Dummys einzelne Ports die ich als Output deklariert habe ansteuern.
Nur was irgendwie nicht klappen will ist mit events zu arbeiten. 
Wenn ich den PortA7 am x20 z.b. Per dummy schalte wird auch ein entsprechendes event im Event Monitor angezeigt.  Nur klappt es nicht notifys mit dem event zu koppeln. Das event löst mein notify nicht aus.
Was könnte ich denn da fasch gemacht haben. ViLeicht gibt es ja jemanden der schon Erfahrungen mit dem mcp am arduino hat und mir so weiterhelfen könnte.

Otto123

Hi,

du kannst im Eventmonitor direkt dein notify definieren lassen, versuch es damit, das wird funktionieren.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Zitat von: BoIIe am 22 Mai 2017, 21:09:55
Wenn ich den PortA7 am x20 z.b. Per dummy schalte [...]
Hallo BoIIe,

vielleicht wirfst Du mal einen Blick auf readingsProxy. Das hat den Zweck, einzelne Elemente eines komplexen Devices als selbständiges Device darzustellen, das erleichtert Dir evtl. manches.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

BoIIe

Vielen dank für die Tips. Das mit dem Event Monitor hat einwandfrei geklappt.  Als nächstes werd ich das mit dem readingsProxy mal testen. Vielen dank nochmal.

KernSani

Wenn das Thema damit gelöst ist, bitte im Subject des ersten Posts noch entsprechend kennzeichnen. Danke :)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

BoIIe

Ich würds ja gerne schließen aber die fragen hören nicht auf  :-\
Ich hab jetzt 2 mcps fest angeschlossen. 0x20 als Ausgänge und 0x21 als Eingänge.
die Ausgänge klappen einwandfrei.
Nur mit dem Eingängen habe ich jetzt Probleme. Und zwar würde ich gerne mit Interrupts arbeiten. Dafür hab ich INTA und INTB jeweils am Pin2 und Pin3 am Ardunino angeschlossen.
Bekomme ich jetzt per Taster ein Signal an einem Port des 0x21 haut mir der INTA und INTB auch ein Signal raus. Nur bleibt das Signal hängen. Die Interrupt Ports sind so lange High
geschalten bis ich per get 0x21 den Status aktualisiere.Da kann ich gleich Pollen oder nicht.
Die Definition vom 0x21

defmod x21 I2C_MCP23017 0x21
attr x21 IODev FRM_0
attr x21 Interrupt A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr x21 InterruptOut separate_active-high
attr x21 Pullup A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr x21 invert_input A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7

setstate x21 Ok
setstate x21 2017-05-28 12:27:54 PortA0 off
setstate x21 2017-05-28 12:27:54 PortA1 off
setstate x21 2017-05-28 12:27:54 PortA2 off
setstate x21 2017-05-28 13:21:03 PortA3 off
setstate x21 2017-05-28 12:27:54 PortA4 off
setstate x21 2017-05-28 12:27:54 PortA5 off
setstate x21 2017-05-28 12:27:54 PortA6 off
setstate x21 2017-05-28 12:27:54 PortA7 off
setstate x21 2017-05-28 12:27:54 PortB0 off
setstate x21 2017-05-28 12:27:54 PortB1 off
setstate x21 2017-05-28 12:43:10 PortB2 off
setstate x21 2017-05-28 12:43:52 PortB3 off
setstate x21 2017-05-28 12:43:34 PortB4 off
setstate x21 2017-05-28 12:27:54 PortB5 off
setstate x21 2017-05-28 12:27:54 PortB6 off
setstate x21 2017-05-28 12:27:54 PortB7 off
setstate x21 2017-05-28 13:31:46 state Ok


Tut mir leid das ich eventuell banale Fragen stelle aber ich finde sehr wenig im Bezug auf mcp und arduino. Die meisten gehen direkt an rasp. mit dem mcp.

Vielen dank nochmal

KernSani

Vielleicht verschiebst du mal nach "Sonstige Systeme". Da liest der Maintainer mit... (Button ganz unten links)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

BoIIe

ich hab inzwischen eine mögliche Lösung gefunden aber bräuchte noch einen Tip ob das auch so gemacht wird.
Ich hab jetzt 2 notifys jeweils für INTA/INTB und nun ein drittes notify, das auf INTA und INTB lauscht. Bei Status wechsel
führt das dritte notify ein get x21 aus und Aktualisiert den Status, womit der Interrupt nur kurz ausgeführt wird und mir ein
event absetzt.
Ist das so die Regel oder gibt es da eine "elegantere" Lösung

BoIIe

Und weiter geht der Spaß
Wenn ich jetzt über dummys die Ausgänge schalten will geht das auch wenn ich jeweils immer nur einen schalte. Will ich 2 gleichzeitig oder hintereinander schalten werden die Ausgänge vertauscht.  PortA1 an. PortA2 an gleichzeitig PortA1 aus.

BoIIe

#10
Das artet hier noch in nem Monolog aus  ;D
Ich glaube ich habe Wurzel des Übels gefunden. Und zwar werden meine readings der Outputs nicht in Echtzeit aktualisiert.
Sprich wenn ich set PortA 0 on setzte steht in den readings nach wie vor PortA 0 off. Erst wenn ich z.B. PortA1 on setzte wird erst mit dem Set das reading aktualisiert. Dabei ist dann zwar PortA 0 nun auf on aber PortA1 immernoch auf off. Der wiederum erst im readings auf on geht nach dem andere befehle wie set Portxy oder get x20 ausführe. Also wäre meine Frage warum werden beim mcp  bei Out befehlen nicht gleich die readings aktualisiert oder muss ich da auch mit interrupt und get x20 notify arbeiten?
Wie gesagt ich finde keine detaillierte Hilfe für arduino und mcp23017. Falls es da etwas gibt würde ich mich natürlich auch gerne selber einlesen.

BoIIe

Ich denke ich hab jetzt ne Lösung. Ich schreib hier einfach mal meine erfahrungen mit dann kann sich villeicht ebenfalls ein Anfänger mal mithangeln.
Wenn ich das jetzt richtig erkannt habe muss ich die Ausgänge auch per notify+dummy ausführen. Wobei in das notify ebenfalls ein get für den jeweils geschalteten Port rein muss, damit das reading aktualisiert wird, und nicht erst beim erneuten schalten eines anderen Ports.

BoIIe

Nach langem Probieren hab ich es jetzt endlich geschafft.
Das Problem waren tatsächlich die readings. Wenn ich die Webseite mit den readings aktualisiert habe wurde auch die readings für die Einzelnen Ports Aktualisiert.
Jetzt hab ich mir einfach ein generelles notify definiert das bei allen x20 Events das reading aktualisiert.
defmod x20_notify_1 notify x20:Port*|get:x20 get x20
attr x20_notify_1 room Interrupt,test

setstate x20_notify_1 2017-05-29 18:47:34
setstate x20_notify_1 2017-05-29 18:14:15 state active

Ich denk mal das müsste eigentlich vom Modul aus selber schon drin sein. Warums bei mir nicht geklappt hat keine Ahnung. Auf jeden fall hat es wie oben beschrieben geklappt und das ist mal
das wichtigste. Falls es noch Tips gibt wie es besser zu machen wäre wär ich dankbar.

BoIIe

#13
Jetzt hab ich das ganze mal einigermaßen sauber zusammengefasst. Das ganze Setting sitzt auf einem Platinen Halter für die Hutschiene. Das Herz ist ein Arduino Uno aus China  :D
2 Mcp 23017  Erweiterungen sind mit drauf.  Ich warte noch auf die Lieferung von 4 st. 8 fach relais Karten. Somit hab ich nacher 32 Relais an einem sauberen Platz die über die Mcp geschalten werden. Zusätzlich hab ich noch weitere IOs vom arduino selber  übrig.
Da kommt nacher noch ein durchsichtiger Deckel mit kleinem Lüfter drauf. Ausserdem kommt noch ein Temp. Sensor rein den ich dann mit dem Arduino abfragen kann damits nicht zu heiß wird ;D
Mal schauen wo das alles noch endet  ;D

P.S. Was man nicht erkennen kann ist das der Arduino sauber unter einer Plexiglas Scheibe sitzt. Dann kommt die ebene für relais und die Mcp hocken halbhoch auf einem Podest.