Modul für die Ansteuerung des MCP23017 I2C Portextender

Begonnen von klausw, 03 Mai 2014, 01:02:40

Vorheriges Thema - Nächstes Thema

jorge

Hallo,
ich habe statt des MCP23017 den MCP 23018 (wegen open drain, Relay-Karte ist aktive-low) verwendet, um die 16 Kanäle einer Relaisplatine zu steuern.

define I2C.MCP23018.A I2C_MCP23017 0x27
attr I2C.MCP23018.A IODev i2c
attr I2C.MCP23018.A OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr I2C.MCP23018.A eventMap on:off off:on
attr I2C.MCP23018.A room RelayCard 

Ich benötige nun alle GP für output. Mit den A0-A7 klaptt das einwandfrei, die Relais werden geschaltet. Aber B0-B7 schalten nicht.
Wenn ich nun 'manuell' über SSH
i2cset -y 1 0x27 0x01 0x00
eingebe, werden die Regsiter B0-B7 auf output gestellt, und- jetzt kann man auch über fhem B0-B7 schalten. Aber das Glück währt nicht lang, nach ca 1 Min können die Ausgänge nicht mehr geschaltet werden. Erst wenn ich über i2cset erneut die Kanäle auf Output stelle, geht es wieder eine Minute...

Das ist natürlich für ein Produktivsystem nicht tragbar. Aber vielleicht weiß jemad eine Lösung?

LG

Jorge
 
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

klausw



Hallo Jorge

Zitat von: jorge am 29 September 2017, 18:13:48
Hallo,
ich habe statt des MCP23017 den MCP 23018 (wegen open drain, Relay-Karte ist aktive-low) verwendet, um die 16 Kanäle einer Relaisplatine zu steuern.
...
Ich benötige nun alle GP für output. Mit den A0-A7 klaptt das einwandfrei, die Relais werden geschaltet. Aber B0-B7 schalten nicht.
...

Das ist natürlich für ein Produktivsystem nicht tragbar. Aber vielleicht weiß jemad eine Lösung?

Ist der MCP23018 denn vollständig kompatibel zum MCP23017?
Eventuell sind einige Adressen anders.
Ich bin gerade im Urlaub.
Du kannst aber inzwischen gern die Unterschiede zwischen beiden ICs raussuchen und ich pflege das ins Modul ein.

Grüße
Klaus

PS: der 17 hat meines Wissens auch Open drain

Gesendet von meinem HTC U11 mit Tapatalk

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

jorge

Haloo Klaus,
danke ersmal für Deine schnelle Anwort aus dem Urlaub.

Zitat von: klausw am 30 September 2017, 17:41:19

Ist der MCP23018 denn vollständig kompatibel zum MCP23017?
Eventuell sind einige Adressen anders.

Du kannst aber inzwischen gern die Unterschiede zwischen beiden ICs raussuchen und ich pflege das ins Modul ein.

Habe die Tabelle aus dem Datenplatt "SUMMARY OF REGISTERS ASSOCIATED WITH THE GPIO PORTS" von Bank 0 und 1 des MCP23017 und MCP23018 mit einer transparenten Folie übereinandergelegt und keine Unterschiede feststellen können.

Es funktioniert ja auch das Schalten von B0-B7, wenn ich vorher mit i2cget die B0-B7 auf Output gesetzt habe. Aber eben nur eine Zeit lang...

Zitat von: klausw am 30 September 2017, 17:41:19
PS: der 17 hat meines Wissens auch Open drain

Lt. Datenblatt hat der MCP23017 kein open Drain, sondern Ausgänge High/low. Wegen der notwendigen 3.3 V am GPIO des Rpi betreibe ich den i2c Bus auch mit 3.3V. Das verträgt sich aber nicht mit den 5V, die am Eingang der Relaisplatine über Pullup anliegen...
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

klausw

Zitat von: jorge am 30 September 2017, 18:38:59
Habe die Tabelle aus dem Datenplatt "SUMMARY OF REGISTERS ASSOCIATED WITH THE GPIO PORTS" von Bank 0 und 1 des MCP23017 und MCP23018 mit einer transparenten Folie übereinandergelegt und keine Unterschiede feststellen können.

Es funktioniert ja auch das Schalten von B0-B7, wenn ich vorher mit i2cget die B0-B7 auf Output gesetzt habe. Aber eben nur eine Zeit lang...

Hmm... irgendwas muss anders sein, sonst würde es beim MCP23017 auch nicht funktionieren. Diesbezüglich ist mir jedoch nix bekannt. Gibt es beim 18er auch 2 Adressmodis?
Kannst du bitte mal MCP und I2C Modul auf Verbose 5 setzen und schauen,  was an den Chip geschickt wird?

Zitat von: jorge am 30 September 2017, 18:38:59

Lt. Datenblatt hat der MCP23017 kein open Drain, sondern Ausgänge High/low...

Mein Fehler,  das waren die Interrupt Ausgänge.


Gesendet von meinem HTC U11 mit Tapatalk

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

jorge

Hallo Klaus,
danke nochmals, dass Du Dich dieser Sache annimmst. Ich glaube auch, dass es sich nicht um ein Spezifikum des MCP23018 handelt, da alle Register offensichtlich gleich sind. Ich hab auch mal den MCP23018 Chip getauscht, um einen Defekt auszuschliessen: Unverändert. 
Zitat von: klausw am 30 September 2017, 20:11:55
Hmm... irgendwas muss anders sein, sonst würde es beim MCP23017 auch nicht funktionieren. Diesbezüglich ist mir jedoch nix bekannt. Gibt es beim 18er auch 2 Adressmodis?
Kannst du bitte mal MCP und I2C Modul auf Verbose 5 setzen und schauen,  was an den Chip geschickt wird?

Kann es vielleicht sein, dass bislang niemand (beim MCP23017) die B0-B7 Ausgänge im Dauerbetrieb genutzt hat? Wie gesagt, nach dem Hochfahren von fhem funktioniert ja die Ansteuerung von B0-B7, dann 'vergisst' der Chip aber wohl die Einstellungen des Output-Registers, offensichtlich schalten B0-B7 von Output auf Input. Nach einem rereadcfg werden die alten Output-Zustände wiederhergestellt, auch ein Schalten ist wieder möglich. Bis (nach ca. einer gefühlten Minute... ) die Relais der Bank B wieder abschalten.

Das Logfile (nach verbose 5) zeigt m.E. nichts Auffälliges:

2017.10.02 10:55:09 5: I2C.MCP23018.A UpdReadings Register: 18, Inhalt: 255
2017.10.02 10:55:09 5: I2C.MCP23018.A UpdReadings Register: 19, Inhalt: 252
2017.10.02 10:55:01 5: I2C.MCP23018.A UpdReadings Register: 19, Inhalt: 254
2017.10.02 10:55:01 5: I2C.MCP23018.A UpdReadings Register: 18, Inhalt: 255

Beim Abbruch des Output wird nichts ins Logfile geschrieben.

LG
Jorge
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

klausw

Hi Jorge,

kein Problem ist schließlich auch mein Modul. Allerdings habe ich es per Ferndiagnose entwickelt da ich selbst keine Baugruppen mit MCP23017 besitze.
Daher kann ich Fehler in der Art wie du sie beschreibst nicht ausschließen. Bisher hat sich halt noch keiner beschwert obwohl es genutzt wird. Seltsam ist auch, Das sich A und B unterschiedlich verhalten obwohl sie im gleichen Vorgang geschrieben werden.

Ich habe jetzt folgendes verstanden:
- nach dem booten funktioniert alles?
- eine Minute später ist Bank B nicht mehr nutzbar
- nach rereadcfg läuft es wieder
- reicht es auch einfach das Output Attribut neu zu setzen ?
- Verbose vom MCP zeig nix seltsames

Das klingt als funkt was anderes dazwischen.
Zeigt verbose 5 vom rpii2c Modul was?
Kann es sein, Das auf deinem Pi nochwas anderes läuft das auf den MCP zugreift?


Zitat von: jorge am 02 Oktober 2017, 11:19:26
Kann es vielleicht sein, dass bislang niemand (beim MCP23017) die B0-B7 Ausgänge im Dauerbetrieb genutzt hat? Wie gesagt, nach dem Hochfahren von fhem funktioniert ja die Ansteuerung von B0-B7, dann 'vergisst' der Chip aber wohl die Einstellungen des Output-Registers, offensichtlich schalten B0-B7 von Output auf Input. Nach einem rereadcfg werden die alten Output-Zustände wiederhergestellt, auch ein Schalten ist wieder möglich. Bis (nach ca. einer gefühlten Minute... ) die Relais der Bank B wieder abschalten.

Das Logfile (nach verbose 5) zeigt m.E. nichts Auffälliges:

2017.10.02 10:55:09 5: I2C.MCP23018.A UpdReadings Register: 18, Inhalt: 255
2017.10.02 10:55:09 5: I2C.MCP23018.A UpdReadings Register: 19, Inhalt: 252
2017.10.02 10:55:01 5: I2C.MCP23018.A UpdReadings Register: 19, Inhalt: 254
2017.10.02 10:55:01 5: I2C.MCP23018.A UpdReadings Register: 18, Inhalt: 255

Beim Abbruch des Output wird nichts ins Logfile geschrieben.

LG
Jorge



Gesendet von meinem HTC U11 mit Tapatalk

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

jorge

#201
Hallo Klaus,

Zitat von: klausw am 02 Oktober 2017, 15:05:37
Ich habe jetzt folgendes verstanden:
- nach dem booten funktioniert alles?

ja, Bank A und B lassen sich als Outpu ansprechen

Zitat von: klausw am 02 Oktober 2017, 15:05:37
- eine Minute später ist Bank B nicht mehr nutzbar

richtig

Zitat von: klausw am 02 Oktober 2017, 15:05:37
- nach rereadcfg läuft es wieder
js
Zitat von: klausw am 02 Oktober 2017, 15:05:37
- reicht es auch einfach das Output Attribut neu zu setzen ?
ja, habe das sogar zum workaround genutzt:

define I2C.MCP23018.A.OutputUpdate DOIF ([+30])\
({fhem("attr I2C.MCP23018.A OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7")})
attr I2C.MCP23018.A.OutputUpdate do always
Zitat von: klausw am 02 Oktober 2017, 15:05:37
- Verbose vom MCP zeig nix seltsames
richtig
Zitat von: klausw am 02 Oktober 2017, 15:05:37
Das klingt als funkt was anderes dazwischen.
Kann es sein, Das auf deinem Pi nochwas anderes läuft das auf den MCP zugreift?
Werde das prüfen. Ich betreibe am I2C Bus unter anderer Adresse auch einen MCP23017, beim dem auf Bank A Ausgänge und B Eingänge liegen. Vielleicht liegt hier der Hase im Pffeffer...   Bin jetzt erstmal ein paar Tage offline. Melde mich danach.
Zitat von: klausw am 02 Oktober 2017, 15:05:37
Zeigt verbose 5 vom rpii2c Modul was?
Auch den Test  muss ich ein paar Tage verschieben...

LG
Jorge




[/quote]
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

jorge

Zitat von: klausw am 02 Oktober 2017, 15:05:37

Kann es sein, Das auf deinem Pi nochwas anderes läuft das auf den MCP zugreift?

Zur Erinnerung: Ich betreibe am I2C Bus einen MCP23017 auf 0x20 und einen MCP23018 auf 0x27

Habe erstmal Folgendes gemacht:

fhem gestopt: Geschaltete Out-Pins behalten ihren Status, schließe daraus, dass die Register auf Output bleiben, wenn fhem nicht läuft, also liegt das Problem bei fhem, Hardware o.k.

Habe dann nacheinander alle mit dem MCP23017 gleichzeitig angelegte Definition deaktiviert: Letztlich war ein kleines Programm zur Bedienung des SPI-Bus die Ursache (/opt/fhem/./GetAnalogInput) welches mit DOIF  im 300 sec Rhytmus analoge Daten vom MCP3208 abholt...
Hab das erstmal deaktiviert, und so läuft die Relaiskarte am MCP23018 nun seit einer Stunde problemlos.

Danke, Klaus, nochmal für Deine Unterstützung. Dein Modul war nicht die Ursache, und arbeitet offensichtlich auch problemlos mit dem MCP23018.

Jorge



FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

R1F800

Kann mir jemand an dieser Stelle verraten, was die Aussage im datenblatt des MCP23018 unter 2.2 Figure 2-1 zu sagen hat ?

SDA und SCL mit einem PullUp zu versehen ok und mit einem KERKO gegen Masse zu legen verstehe ich ja, aber was bedeutet

PIN mit 50pf gegen Massen?
Welcher PIN ist gemeint ?

LuckyDay

du schaust aber auch in das Datenblatt, z.B. vom RPI da sind die Pull Up schon drauf

R1F800

Ich habe den nicht an nem Pi sondern an einem ESP8266

klausw

Zitat von: R1F800 am 27 November 2017, 12:10:06
Kann mir jemand an dieser Stelle verraten, was die Aussage im datenblatt des MCP23018 unter 2.2 Figure 2-1 zu sagen hat ?

SDA und SCL mit einem PullUp zu versehen ok und mit einem KERKO gegen Masse zu legen verstehe ich ja, aber was bedeutet

PIN mit 50pf gegen Massen?
Welcher PIN ist gemeint ?
Für einen Bastler liest du ziemlich weit  8)
Figure 2-1 ist nur die Beschaltung, welche für die Messung des Timings verwendet wurde.
Die 50p sind vermutlich für alle Pins mit Ausnahme der 2 I2C Pins.
Die Kondensatoren in der Abbildung sollen nur die typische/maximale (so genau habe ich es jetzt nicht gelesen) kapazitive Last der Pins simulieren.
Mit anderen Worten, die sind mehr oder weniger über den kapazitiven Belag der Leiterbahnen und Bauteile die an die Pins angeschlossen werden in deiner Schaltung bereits vorhanden.
Wichtig sind die Pullups am I2C und ein Stützkondensator zwischen + und Masse des MCP kann auch nicht schaden.
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

AlphaKingOne

Kleines Update meinerseits. Bei mir Läuft es soweit ganz gut bist auf den Interrupt da ich den dann aber doch nicht brauchte hab ich das erst einmal beiseite gelegt. Ich hatte ja von Störungen geschrieben und das ich den Pi dann jedes mal neu starten musste die immer Abends auftauchten. Seit dem ich umgezogen bin hab ich das Problem nicht mehr (War ein altes Haus ohne FI). Seit einiger zeit hab ich eine USV. Beim rum spielen mit dem Teil (USV AN AUS USV gab aber immer Strom raus, also Pi ging nicht aus) hatte ich das Problem wieder. Also hatte es was mit dem Stromnetz zu tun. Hatte aber immer noch keine Lust das Ozi mal dran zu hängen um der Sache auf den Grund zu gehen. Werde aber noch einen Kondensator etwas näher dransetzen und mal testen ob das was bringt. Als Netzteil nutze ich https://www.reichelt.de/Schaltnetzteile-fuer-Hut-Schiene/SNT-MW-DR30-05/3/index.html?ACTION=3&GROUPID=4993&ARTICLE=85222 das hier falls es jemand interessiert.
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

jorge

Ich hatte auch immer wieder Probleme durch 220 V Schaltleitungen, die vom einem 16 X Relaisboard  via MCP23018 angesteuert wurden. Insbesondere eine über Relais angeschlossende WW-Pumpe  brachte gelegentlich alle Ausgänge in den Status 'Input', und es half nur ein Reset des ganzen Systems.

Das Verhalten zeigte sich auch, als ich die Pumpe !von Hand! geschaltetet habe. Ich habe dann die Pumpe über einen externen HM-Steckdosenschalter geschaltet: Keine Abstürze mehr.

Mein Fazit: Offensichtlich sind MCP23017 /18 extrem empfindlich gegen Induktionsströme...

LG Jorge
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

Bastian0302

Also ich schalte mit den mcp's über ein ULN2803A 24 volt relais. Da ich von den Relaisboard nicht viel halte,da auch die Bewertungen dafür nicht so gut aussehen. Habe auch eine eigene Platine dafür entworfen und diese funktioniert seit einem guten viertel Jahr ohne probleme. Angeschlossen ist testweite auch ein Taster und ein Bewegunsmelder.
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos