FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Burny4600 am 03 Februar 2021, 14:23:49

Titel: [GELÖST] MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 03 Februar 2021, 14:23:49
Durch einen Ausbau wurde eine dritte MCP23017 Bank notwendig.
Die Erweiterungen sind baugleich wie Bank 1 (0x20) und Bank 2 (0x21).
Die 8 Ausgänge (A0-A7) der Bank 3 lassen sich ohne Probleme schalten, nur die 8 Eingänge (B0-B7) funktionieren nicht.
Alle Eingänge werden mit 0V (GND) geschaltet. Dazwischen hängt ein Opto.
Grundsätzlich sollte es kein Problem sein, aber ich komme einfach nicht auf den Fehler woran es liegen kann.

list mcp23017_B3_HZR
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp02.cfg
   DEF        0x22
   FUUID      6006f430-f33f-1c1b-4170-848653a3fb9e68f4
   I2C_Address 34
   IODev      RpiI2C_1
   NAME       mcp23017_B3_HZR
   NR         325
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2021-02-03 10:27:15   PortA0          on
     2021-02-03 10:27:15   PortA1          on
     2021-02-03 10:27:15   PortA2          on
     2021-02-03 10:27:15   PortA3          on
     2021-02-03 10:27:15   PortA4          on
     2021-02-03 10:27:15   PortA5          on
     2021-02-03 10:27:15   PortA6          on
     2021-02-03 13:17:35   PortA7          on
     2021-02-03 12:56:09   PortB0          on
     2021-02-03 12:56:09   PortB1          on
     2021-02-03 12:56:09   PortB2          on
     2021-02-03 12:56:09   PortB3          on
     2021-02-03 12:56:09   PortB4          on
     2021-02-03 12:56:09   PortB5          on
     2021-02-03 12:56:09   PortB6          on
     2021-02-03 12:56:09   PortB7          on
     2021-02-03 14:00:15   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  B0,B1,B2,B3,B4,B5,B6,B7
   InterruptOut connected_active-low
   OnStartup  A0=on,A1=on,A2=on,A3=on,A4=on,A5=on,A6=on,A7=on
   OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
   Pullup     B0,B1,B2,B3,B4,B5,B6,B7
   alias      Digital I/O Bank 3 | Port A0-A7 (Output) ,B0-B5 (Input)
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@red error:it_net@red
   devStateStyle style="text-align:left;;font-weight:bold;;"
   event-on-change-reading .*
   group      MCP23017
   icon       it_net
   invert_input B0,B1,B2,B3,B4,B5,B6,B7
   room       _IO


Die dritte Bank wurde beim GPIO Interrupt eingetragen.

list INT
Internals:
   CFGFN      /media/hdd/fhem/mycfg/GPIO/GPIO_rasp02.cfg
   DEF        21
   EXCEPT_FD  19
   FUUID      5c4500f9-f33f-c019-b5f0-dfc1c428017fdc7e
   GPIO_Basedir /sys/class/gpio
   GPIO_Nr    21
   NAME       INT
   NR         1005
   STATE      AUS
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/bin/gpio
   lasttrg    1612357274.56659
   READINGS:
     2021-02-03 14:01:14   Dblclick        off
     2021-02-03 14:01:14   Longpress       off
     2021-02-03 14:01:19   Pinlevel        low
     2021-02-03 14:01:14   interrupt       egal
     2021-02-03 14:01:14   state           off
   fhem:
     interfaces switch
Attributes:
   active_low yes
   alias      RPI_GIPO 21 Interrupt für MCP23017 Modul
   devStateIcon EIN:control_on_off@0CFB0C AUS:control_home@red
   devStateStyle style="text-align:left;;font-weight:bold;;"
   direction  input
   event-on-change-reading .*
   eventMap   on:EIN off:AUS
   group      MCP23017
   icon       control_on_off
   interrupt  both
   room       _GPIO,_IO
   userReadings interrupt {fhem ("get mcp23017_B1_HZR,mcp23017_B2_HZR,mcp23017_B3_HZR");;"egal"}


Hardwaremäßig ist betreffend GPIO Interrupt keine Änderung notwendig.



Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 03 Februar 2021, 14:49:03
... ist die Beschaltung der Eingänge so vorgegeben oder "Eigenkonstruktion" ?

Da der Baustein MCP23017SP über keine internen Pull-Down-Widerstände verfügt, werden alle als Eingang deklarierten Pins über die internen Pull-Up-Widerstände auf HIGH-Pegel gezogen (Negative Logik), um einen undefinierten Zustand oder das Auffangen von Störungen auszuschließen. Die Eingangspins müssen also aktiv gegen Masse gezogen werden.

Mit deiner Beschaltung über den Opto-Koppler erreichst du an den Eingängen keine ausreichende Pegeländerung.


LG
Papa Romeo
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 03 Februar 2021, 18:31:28
Ich habe es vorher schon ohne Optokoppler getestet, aber keine Änderung am Eingangspin erreicht.
Test mit Schalter gegen Masse und Schalter gegen 5V erreichten keine Änderung.
Da die Schaltkontakte doch sehr weit weg sind, habe ich eine Trennung über den Opto verwendet.
Jedenfalls habe ich einen Überlegungsfehler bei der Logig am Eingang, denn ich noch ändern muss.
Da werde ich nochmals einen Testaufbau machen um die Funktion der Eingänge nochmals prüfen.
Hoffentlich spielen meine alten Grauen Zellen da noch mit.  :-[
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 03 Februar 2021, 18:44:37
...hast du´s mal mit externen Pullup´s versucht.

Hatte ähnliches Problem mal mit nem PCF8575. Ging dann nur mit externen Pullup´s.
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Stelaku am 03 Februar 2021, 19:11:17
Hallo Burny4600

Ich hatte bei meinen MCP´s als Eingang auch mal das selbe Problem. Die Reading für die einzelnen Eingänge wollten sich nicht ändern obwohl ich den Eingang direkt auf minus gelegt katte.

Bei mir war es dann der nicht richtig ausgeführte interupt. Wenn ich das richtig in deinen List für den Interupt sehe hast Du mehrere MCP´s als Eingänge. Ich zähle drei.

Sollte dann das Attr InterruptOut  für die MCP´s mit Eingängen nicht besser so eingestellt sein.

attr mcp23017_B3_HZR InterruptOut connected_open-drain


Hatte das mal im Forum gelesen und bei meinen MCP´s bis her ohne Probleme am laufen.
Hab den Forum Eintrag gefunden https://forum.fhem.de/index.php/topic,23164.msg539631.html#msg539631.
Dann ist aber noch ein externer pull up Wiederstand am GPIO nicht unwichtig.
Ich verwende bei mir GPIO 4 mit einen 100K Ohm pull up Wiederstand als interupt.
Vieleicht hilft auch zum einkreisen des Fehlers einen Eingang auf masse legen und dann manuell einen get mcp23017_B3_HZR in der Konsole absetzten.
Wenn jetzt das reading im mcp23017_B3_HZR  für den Eingang wechselt ist es der Interupt der nicht ausgewertet wird.

Viele Grüsse

Stephan
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 05 Februar 2021, 18:47:49
Ich habe jetzt alles durch.
Pull-UP extern vom Eingang gegen High (5V).
Die Eingänge schalten wiederum nicht eigenständig. Nur mit einem Refresh wechselt der Eingang seinen Zustand.
Meine Vermutung liegt beim Mixed Betrieb, da diese Bank sowohl mit Ausgängen und Eingängen betrieben wird.

Anbei ein vollständiger MCP23017 Plan mit Interrupt.
Die Interupt-Schaltung ist für die Trennung der 3,3V des PIs und die 5V des MCP23017.
Die Interupt-Schaltung ist aber nur einmal mit der ersten Bank ausgeführt.
Ich teste noch ein paar andere Möglichkeiten und Tipps aus dem Forum.
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Stelaku am 05 Februar 2021, 18:58:51
Hallo Burny4600

Es ist wirklich sehr wichtig das die Interup Ausgänge der MCP´s nur dann parallel angeschlossen sind wenn Du die InteruptOut Funktion der MCP´s mit Eingängen auf connected_open-drain stellst.
Ansonsten hast Du wenn ein Interupt low ist und der Andere high einen kurzschluss.

Eine sache ist mir noch aufgefallen ist zwar lange her aber ich glaube die Semikolons im userreading waren nicht ganz unwichtig. Ich habe bei mir 4 MCP´s als Eingänge und mein
usereading sieht so aus.


test {fhem ("get MCP0,MCP2,MCP4,MCP6");;;; "egal"}


Kann auch blödsinn sein aber vieleicht ist es nur die Anzahl der Semikolons Bei mir vier weil vier mal get ? wären dann bei Dir 3 ;;; . Ein Versuch kann nicht schaden.

Viele Grüsse
Stephan
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 05 Februar 2021, 20:10:39
Zitat von: Burny4600 am 05 Februar 2021, 18:47:49
Anbei ein vollständiger MCP23017 Plan mit Interrupt.
Die Interupt-Schaltung ist für die Trennung der 3,3V des PIs und die 5V des MCP23017.
Die Interupt-Schaltung ist aber nur einmal mit der ersten Bank ausgeführt.

Hallo Burny4600,

kleine Verständnisfrage:

1. Ist das jetzt der komplette Schaltplan oder fehl da jetzt noch ein MCP
2. hast du alle Int-Ausgänge der MCP angeschlossen oder nur Int A von Bank 1
3. Sind die Port´s vom MCP1 und MCP2 alle Ausgänge oder gemischt.

LG
Papa Romeo
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 06 Februar 2021, 10:00:36
@Papa Romeo
Zitat1. Ist das jetzt der komplette Schaltplan oder fehl da jetzt noch ein MCP
Das stimmt. Am Plan sind nur zwei Banken ersichtlich.
Der Pan dient nur zur Dokumentation des prinzipiellen Aufbaus der MCP23017.

Zitat2. hast du alle Int-Ausgänge der MCP angeschlossen oder nur Int A von Bank 1
Es gibt nur einen INT Ausgang für alle MCPs, und das ist INT-A der ersten Bank.

Zitat3. Sind die Port´s vom MCP1 und MCP2 alle Ausgänge oder gemischt.
Wie erwähnt handelt sich es hierbei um 3 Banken.
Bank 1 (Port A0-A7 und B0-B7) sind nur Eingänge
Bank 2 (Port A0-A7 und B0-B7) sind nur Ausgänge
Bank 3 (Port A0-A7) Ausgänge und (Port B0-B7) Eingänge und wird nachgerüstet.

@Stelaku
Zitat... Eingang auf Masse legen und dann manuell einen get mcp23017_B3_HZR in der Konsole absetzten.
Wenn jetzt das Reading im mcp23017_B3_HZR  für den Eingang wechselt ist es der Interupt der nicht ausgewertet wird.
So ist das Verhalten. Es kann nur mit dem Interrupt zusammenhängen.

Ich werde mir die Infos was den Interrupt betrifft nochmals abarbeiten. Ich denke da habe ich einen Denkfehler.
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 06 Februar 2021, 10:44:07
Zitat von: Burny4600 am 06 Februar 2021, 10:00:36
..Es kann nur mit dem Interrupt zusammenhängen.

So wie ich das sehe, hängt es definitiv am Interrupt.

Für was sind die Interruptausgänge da?

Wenn die Softare der MCU nicht in der Lage ist oder es programmiertechnisch nicht realisiert ist, das die MCP´s in bestimmten Intervallen über I2C abgefragt werden, erfährt die MCU nie eine Änderung an den PIN´s der Bank die als Eingänge fungieren. 
Also nutzt man die INT-Ausgänge. Sie teilen der MCU mit, wenn sich ein Pegel an einem Eingäng ändert. Für Ausgänge spielt INT keine Rolle. Wenn du jetzt also den INT deiner 3 Bank nicht anschließt, wird die MCU nie eine Änderung an diesen Eingängen mitbekommen. Ausser über ein Refresh und somit ein "neu einlesen" des MCP´s über I2C.

INT von Bank1 ist angeschlossen --> sind Eingänge --> werden eingelesen             --> funktioniert   --> o.k
INT  von Bank2 ist offen               --> sind Ausgänge --> einlesen nicht erforderlich --> funktioniert --> o.k
INT von Bank3 ist offen                 --> Ausgänge        -->einlesen nicht erforderlich --> funktioniert --> o.k
                                                     --> Eingänge         --> werden nicht eingelesen  --> n.o.k

LG
Papa Romeo
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 06 Februar 2021, 12:38:22
@Papa Romeo
Zitat...MCU nie eine Änderung an den PIN´s der Bank die als Eingänge fungieren
Das heißt. Alle Banken die Eingänge verwenden ist auch immer hardwaremäßig (INT-A, INT-B) mit dem Interrupt GPIO zu verbinden, wenn ich dich jetzt richtig verstanden habe.

Dann wäre also nicht nur der INT-A der ersten Bank (A0-A7), sondern auch der INT-B der ersten Bank an den Interrupt GPIO zu verbinden.
Ebenso wäre der INT-B der dritten Bank (B0-B7) an den Interrupt GPIO zu verbinden.

Das habe ich bisher noch nie so gehört, oder habe ich dich falsch verstanden?

Ich bin immer davon ausgegangen, dass auf einem Pi mit MCP23017 Banken nur ein einziges Mal der INT an den Interrupt GPIO hardwaremäßig zu verbinden ist.
Der Rest wird mit
interrupt {fhem ("get mcp23017_B1_HZR,mcp23017_B3_HZR");;"egal"} verknüpft.
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 06 Februar 2021, 12:59:30
Zitat von: Burny4600 am 06 Februar 2021, 12:38:22
@Papa RomeoDas heißt. Alle Banken die Eingänge verwenden ist auch immer hardwaremäßig (INT-A, INT-B) mit dem Interrupt GPIO zu verbinden, wenn ich dich jetzt richtig verstanden habe.

...ich weiß jetzt nicht ob beide INT-Ausgänge genutzt werden müssen, wenn jetzt Port A und Port B als Eingänge genutzt werden oder in diesem Fall dann der Port A reicht. Wenn Du sagst dass deine Bank 1 funktioniert und Port A und B als Eingänge aktualisiert werden obwohl nur INT A angeschlossen ist, könnte das so sein.

Zitat von: Burny4600 am 06 Februar 2021, 12:38:22
Ich bin immer davon ausgegangen, dass auf einem Pi mit MCP23017 Banken nur ein einziges Mal der INT an den Interrupt GPIO hardwaremäßig zu verbinden ist.
Der Rest wird mit
interrupt {fhem ("get mcp23017_B1_HZR,mcp23017_B3_HZR");;"egal"} verknüpft.

...wenn das so wäre, wie soll denn der MCP der Bank1, eine Änderung der Eingänge an Bank3 mitbekommen und dann einen Interrupt auslösen.
Das muss die Bank3 der MCU schon selber mitteilen oder sie wartet bis die MCU eine erneute I2C Abfrage initialisiert und frägt: " na Jung´s, habt ihr mir irgendwelche Änderungen mitzuteilen ?"

Hast du mal versucht, zur Änderung an der Bank3 auch eine Änderung an einem Eingang der Bank1 zu machen und dann geschaut ob die Bank3 auch aktualisiert wird ?


LG
Papa Romeo

Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 06 Februar 2021, 13:24:00
@Papa Romeo
Folgender Test.
Eingang B4 an Bank 3 gesetzt => Keine Änderung an Bank 3 ersichtlich.
Eingang B0 an Bank 1 gesetzt => Statusänderung B0 an Bank 1 und der Status an der Bank 3 B4 wird mit geändert.
Damit ist deine Erklärung passend.

Wenn auf der Bank 1 die Eingänge A0 bis A7 den Status ändern, wird er INT-A ausgelöst.
Auch wenn auf der Bank 1 die Eingänge B0 bis B7 den Status ändern, wird INT-A ausgelöst.
Somit ist der INT-A der Bank für alle 16 Eingänge ausreichend.

Darum ist ein Hardware Interrupt an der Bank drei notwendig.
In diesem gemischtem Betrieb der Bank 3 (Ausgänge A0-A7 und Eingänge B0-B7) ist es wahrscheinlich besser den INT-B zu verwenden?
Was ist dein Ratschlag?
 
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 06 Februar 2021, 14:09:53
...kann ich dir auch nicht sagen. Must du testen.

Wie ich oben schon schrieb, kann sein das INTA eine Art "Masterfunktion" hat und wenn alle Port´s als Eingänge genutzt werden dieser dann ausreicht.

Bei deiner Bank3 hast du aber den PortA als Ausgang definiert und da denke ich mal, dass INTA dann von PortB nicht bedient wird.
Ich kann aber auch falsch liegen und INTA wird trotzdem gesetzt, dann wäre es aber meines Erachtens nach sinnlos getrennte INT-Ausgänge für PortA und B
zu Verfügung zu stellen.

LG
Papa Romeo
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Stelaku am 06 Februar 2021, 14:33:09
Hallo Burny4600

Bei gesetzten attr. interuptOut separate 

IntA wird getriggert wenn an den A Ports eine Änderung stattfindet.
IntB wird getriggert wenn an den B Ports eine Änderung stattfindet.

Bei gesesten attr. interupOut connect

IntA und IntB werden beide getriggert wenn sich was an den Port A oder B ändert.


Bei zwei Banken mit Eingängen so wie bei Dir. Ist das attr. conected_open_drain in beiden MCP zu verwenden.

Dann kannst Du Dir aussuchen welche Int Ausgänge Du miteinander verbindest und dann zusammen auf Deinen Optokopler legst.

Gruß

Stephan




Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Papa Romeo am 06 Februar 2021, 15:08:42
Zitat von: Stelaku am 05 Februar 2021, 18:58:51
Es ist wirklich sehr wichtig das die Interup Ausgänge der MCP´s nur dann parallel angeschlossen sind wenn Du die InteruptOut Funktion der MCP´s mit Eingängen auf connected_open-drain stellst.
Ansonsten hast Du wenn ein Interupt low ist und der Andere high einen kurzschluss.

... erweitere deine Interuptsteuerung wie im Anhang gezeigt mit einfachen Kleinsignaldioden (z.B. 1N4148) dann gehst du dem obigen aus dem Weg und kannst die INT-Ausgänge ohne Bedenken parallel legen. Eventuell musst du den 470 Ohm Widerstand etwas verkleinern, da er dann um 0.5 bis 0.7 Volt weniger verbraten muss.
Aber das musst einfach mal testen.
Solltest aber trotzdem bei allen MCP´s für die INT-Ausgänge Open-Drain oder aktiv-Low einstellen. Auch gemischt.
Aber ein aktiv-High an nur einem MCP sperrt dir deine Interrupt-Funktion.

LG

Papa Romeo
Titel: Antw:MCP23017 Portextender ergänzte dritte Bank ohne Funktion
Beitrag von: Burny4600 am 06 Februar 2021, 15:26:48
Es lag nur an der Interrupt Beschaltung.
Man lernt ja immer noch dazu.

@Papa Romeo
Das mit den Dioden hatte ich mir auch schon überlegt. Die 470E der LED sind auch mit vorgeschalteter Diode ausreichend.

@Stelaku
Das wäre auch eine Variante die zu überlegen ist.

Bisher hatte ich nur eine Doppelbank im Einsatz, darum gab es auch keine Probleme.
Danke für eure Tipps.

Jetzt funktioniert alles.