I2C MCP23017 Ausgang wird sporadisch zu Eingang

Begonnen von ThomasRamm, 26 Dezember 2015, 00:26:40

Vorheriges Thema - Nächstes Thema

ThomasRamm

Hallo,
ich habe das Phänomen das nach mehrmaligem Schalten eines Ausgangs, alle Ausgänge aller Chips auf Eingang umgestellt werden. Evtl. werden auch Register der Eingänge verändert, bin mir aber nicht sicher ob das bei den Eingängen so gehört.

Ich habe an meinem Rpi 6 MCP23017 Chips angeschlossen, Adresse 0x22,0x23 = Eingang; Adresse 0x24,0x25,0x26,0x27 = Ausgang

Hier ein Auszug aus meiner Konfiguration, alle Pin sind identisch konfiguriert, so das dieser Auszug wohl reichen wird.

########## I2C Bus ##########
define myI2C RPII2C 1
attr myI2C room i2c
attr myI2C verbose 5
########## Ausgangsmodul 2/4 ##########
define modulA26 I2C_MCP23017 0x26
attr modulA26 IODev myI2C
attr modulA26 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr modulA26 room i2c
########## Ausgänge auf die Oberfläche ##########
define A2.05 readingsProxy modulA26:PortB3
attr A2.05 group Modul 2
attr A2.05 room Ausgang
attr A2.05 setFn {($CMD eq "on")?"PortB3 on":"PortB3 off"}
attr A2.05 setList on off


zum Schalten des Ausgangs klicke ich auf den readingsProxy und mache ihn An,Aus,An,...
(http://i2cfehler.png)
in der Grafik sieht man wie beim Einschalten das korrekte bit auf ON, aber zusätzlich im Chipregister 0x00 und 0x01 noch jeweils ff geschrieben wird, was die Ausgänge zu Eingängen macht.

Weiß jemand Rat was hier evtl. schief geht?

Anbei noch meine Log-Datei mit RPII2C auf verbose=5 (die letzten Einträge im Log müssten von Ausgang 0x25:PortB3 sein, da der Fehler aber bei allen Ausgängen auftritt ist das vermutlich egal)


2015.12.25 23:12:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:12:36 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:12:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:12:36 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:12:36 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:12:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 38
2015.12.25 23:12:36 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:12:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 38
2015.12.25 23:12:36 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:12:36 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38 Data: 8
2015.12.25 23:13:06 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:06 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:06 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:06 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:13:06 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:13:06 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 38
2015.12.25 23:13:06 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:06 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 38
2015.12.25 23:13:06 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:13:06 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:13:28 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:28 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:28 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:28 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:13:28 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:13:28 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 38
2015.12.25 23:13:28 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:28 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 38
2015.12.25 23:13:28 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:13:28 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38 Data: 8
2015.12.25 23:13:45 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:45 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:45 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 38
2015.12.25 23:13:45 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:13:45 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:13:45 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 38
2015.12.25 23:13:45 5: myI2C: HWaccess I2CAddr: 0x26
2015.12.25 23:13:45 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 38
2015.12.25 23:13:45 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:13:45 5: myI2C ->Client gefunden: modulA26, I2Caddress: 38
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:14:25 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:14:25 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:14:25 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:14:25 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:14:25 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:14:25 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:14:25 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:14:25 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:14:25 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:14:25 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:14:25 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:14:25 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:14:25 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:14 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:14 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:14 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x22
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:14 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulE22, I2Caddress: 34 Gelesen: 0 0
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:14 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:14 5: myI2C: HWaccess I2CAddr: 0x22
2015.12.25 23:15:14 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:14 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:14 5: myI2C ->Client gefunden: modulE22, I2Caddress: 34 Gelesen: 0 0
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:17 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:17 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:17 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:17 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:17 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:15:17 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:17 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:17 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:17 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:17 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:17 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:17 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:17 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:21 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:21 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:21 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:21 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:21 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:21 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:21 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:21 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:21 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:21 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:23 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:23 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:23 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:23 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:23 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:23 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:23 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:23 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:23 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:15:23 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:15:26 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:26 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:26 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:26 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:26 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:26 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:26 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:26 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:26 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:26 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:29 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:29 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:29 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:29 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:29 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:29 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:29 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:29 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:29 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:15:29 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:15:31 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:31 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:31 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:31 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:31 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:31 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:31 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:31 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:31 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:31 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:32 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:32 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:32 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:32 5: myI2C: HWaccess I2CAddr: 0x22
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:32 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:32 5: myI2C ->Client gefunden: modulE22, I2Caddress: 34 Gelesen: 0 0
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:32 5: myI2C: HWaccess I2CAddr: 0x23
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 35
2015.12.25 23:15:32 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:32 5: myI2C ->Client gefunden: modulE23, I2Caddress: 35 Gelesen: 0 0
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:32 5: myI2C: HWaccess I2CAddr: 0x22
2015.12.25 23:15:32 5: myI2C: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 34
2015.12.25 23:15:32 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 18
2015.12.25 23:15:32 5: myI2C ->Client gefunden: modulE22, I2Caddress: 34 Gelesen: 0 0
2015.12.25 23:15:33 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:33 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:33 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:33 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:33 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:33 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:33 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:33 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:33 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:15:33 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:15:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:36 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:36 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:36 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:36 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:36 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:36 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:36 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:37 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:37 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:37 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:37 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:37 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:37 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:37 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:37 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 8|i2caddress: 37
2015.12.25 23:15:37 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|8|, laenge: |2|
2015.12.25 23:15:37 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37 Data: 8
2015.12.25 23:15:38 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:38 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:38 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 18|data: 0|i2caddress: 37
2015.12.25 23:15:38 5: myI2C: HWaccess block schreiben, Reg: 0x12 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:38 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37
2015.12.25 23:15:38 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:38 5: myI2C: HWaccess I2CAddr: 0x25
2015.12.25 23:15:38 5: myI2C: vom client empfangen|direction: i2cwrite|reg: 19|data: 0|i2caddress: 37
2015.12.25 23:15:38 5: myI2C: HWaccess block schreiben, Reg: 0x13 Inh(dec):|0|, laenge: |2|
2015.12.25 23:15:38 5: myI2C ->Client gefunden: modulA25, I2Caddress: 37

klausw

Hallo Thomas,

in deinem Logfile kann ich keinen Eintrag finden, das die Register 0 und 1 beschrieben worden sind.
Sowas wie: "vom client empfangen|direction: i2cwrite|reg: 0|data: 255|i2caddress: 38"
Es wurden immer nur die Output Register beschrieben.
RPII2C hast du sicher nur 1x definiert? (Frage nur zur Sicherheit ;) )
Wenn ja, dann kommt die Registeränderung nicht über FHEM.

Was genau bedeutet mehrmaliges Schalten? (feste Anzahl, zufällig...)
Werden alle Chips umgestellt wenn du nur den Ausgang eines einzigen Chips schaltest?
Was ist an den Ausgängen angeschlossen? (evtl. gibt es einen Spannungsdrop beim schalten der Last, was zu einem Reset der Chips führt und die Ports wieder als Eingänge setzt)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

ThomasRamm

Hallo, will das Thema nochmal aufgreifen.
Es handelt sich tatsächlich um Fehler die im Bus auftreten.
Diese sind inzwischen sehr selten geworden, insbesondere das Austauschen des Buskabel hat sehr geholfen (von geschirmten Netzwerkkabel auf einfaches 4adriges Postkabel umgestellt).
Leider konnte ich den Fehler noch nicht komplett beheben und habe einen Workaround geschaffen.
per cronjob läuft 1x pro Minute ein Watchdog der prüft ob meine Chips auf Ausgang gesetzt sind, wenn nicht werden sie wieder auf Ausgang gesetzt und können dann durch fhem genutzt werden.
Mein Hauptproblem ist jetzt noch (abgesehen davon den Fehler komplett weg zu bekommen), das ich danach einen der Ausgänge des betroffenen Chip schalten muss damit die Ausgänge wieder korrekt gesetzt werden (beim schalten eines Ausgangs werden alle Ausgänge des Chip beschrieben).
Weiß jemand wie ich das Modul in fhem dazu bringen kann die Ausgänge nochmal neu zu beschreiben mit dem von fhem gespeicherten Status - ohne einen Ausgang schalten zu müssen?

Gruß
Thomas

klausw

Naja wenn ich Buskabel lese stehen mir gleich die Haare zu Berge...
Wie lang sind die denn?
I2C ist also lokales Bussystem gedacht.
Also auf einer Platine oder in einem Gerät.
Es als Kabel durchs Haus zu ziehen würde ich nicht empfehlen.

Zitat von: ThomasRamm am 06 Januar 2017, 08:50:39
Mein Hauptproblem ist jetzt noch (abgesehen davon den Fehler komplett weg zu bekommen), das ich danach einen der Ausgänge des betroffenen Chip schalten muss damit die Ausgänge wieder korrekt gesetzt werden (beim schalten eines Ausgangs werden alle Ausgänge des Chip beschrieben).
Weiß jemand wie ich das Modul in fhem dazu bringen kann die Ausgänge nochmal neu zu beschreiben mit dem von fhem gespeicherten Status - ohne einen Ausgang schalten zu müssen?
Hmm, das ist so nicht vorgesehen.
Hast du probiert einen Ausgang einfach auf den bereits eingestellten Wert zu setzten? (ich bin mir nicht sicher ob ich das abgefangen habe)

Du könntest eine Routine in die myutils legen, welche die Readings für die Ausgänge ausliest und diese dann über das RPII2C Modul auf den Bus schreibt.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

ThomasRamm

Die Kabel sind ein paar cm lang. Habe hier kein Bild zur Hand, aber wenn du auf die Seite http://www.horter.de gehst siehst du ein Bild von denen, ich habe es nach dem gleichen Prinzip gemacht. vom PI geht ein Kabel zum Modul 1, dort ist der Chip mit dem Anschlüssen dran, von da aus geht es weiter zum Modul 2 (gleicher Chip),...

ZitatHast du probiert einen Ausgang einfach auf den bereits eingestellten Wert zu setzten? (ich bin mir nicht sicher ob ich das abgefangen habe)
Nein noch nicht, ich kenne aber auch auf der Konsole den aktuellen Wert nicht.
ZitatDu könntest eine Routine in die myutils legen, welche die Readings für die Ausgänge ausliest und diese dann über das RPII2C Modul auf den Bus schreibt.
Den Ansatz werde ich mal versuchen...

Mein aktueller Watchdog sieht übrigens so aus (2 Module mit den Adressen 0x26,0x27), getriggert über cron:

#!/bin/bash
testestatus() {
  for adresse in $1
    do
      #echo Adresse: $adresse
      test=`/usr/sbin/i2cget -y 1 $adresse 0x00`
      if [ "$test" != "0x00" ]
        then
          log1=`date +"%Y-%m-%d_%T"`
          echo "$log1 $adresse $test" >> /opt/fhem/log/i2cwatchdog.log
          /usr/sbin/i2cset -y 1 $adresse 0x00 0x00
          /usr/sbin/i2cset -y 1 $adresse 0x01 0x00
      fi
  done
}

testestatus "0x26 0x27"


Da müsste ich dann nach dem i2cset wohl noch einen aufruf zu fhem einbauen

Gruß
Thomas