Firmata mit MCP23017

Begonnen von beSmart, 08 April 2018, 14:16:41

Vorheriges Thema - Nächstes Thema

jensb

Ein Test ohne das LCD-Display am Bus wäre ebenfalls einen Versuch wert, sofern noch nicht probiert.

Wenn du einen RPi mit zugängiger Pfostenleiste hast und das Bastelrisiko nicht scheust, könntest du den MCP direkt an den RPi hängen und überprüfen, ob es dann funktioniert. Falls sich dann immer noch nichts tut und du keinen Verdrahtungsfehler hat, ist der MCP wahrscheinlich defekt.

Eine weitere Option wäre es, einen "normalen" Arduino-Sketch ohne Firmata für den MCP einzuspielen, der z.B. eine LED anmacht, wenn sich am MCP was tut oder der einen Pin des Arduino an den MCP weitergibt und du das am MCP nachmisst.

Wenn du ein Digi-Scope zur Hand hast, könntest du dir auch den I2C-Bus ansehen und zumindest überprüfen, ob die Pegel normal aussehen.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

klausw

Zitat von: jensb am 09 Februar 2019, 19:43:16
Mögliches Implementierungsproblem im Modul 52_I2C_MCP23017, könnte Folgefehler verursachen, sollte auch untersucht werden.

Werde ich mir anschauen.
Wenn 0x00 zurück geliefert wird gibt es aber meines Wissens keine Fehlermeldung.

Zitat von: jensb am 09 Februar 2019, 19:43:16

F0=START_SYSEX, 76=I2C_REQUEST, 20=I2C-Adresse, 08=periodisches Lesen (benötigt FRM-Attribut sampling-interval), 12000200=Payload, F7=END_SYSEX

Die Antwort müsste nun mit >f077 beginnen (77=I2C_REPLY) und sich unaufgefordert periodisch wiederholen. Statt dessen kommt:und das ist identisch mit dem Text "I2C: Too few bytes received". Diese Meldung erzeugt das Firmata-Device, wenn es ein I2C-Read absetzt, aber keine oder nur eine unverständliche Antwort erhält.
In den LCD Modulen wird meines Wissens ein PCF8574 verwendet.
Beim Studium der Datenblätter fiel mir auf, das dieser den gleichen Adressraum verwendet. Also per default auf 0x20 gestellt ist.
Das müsste aber auffallen, wenn LCD und MCP23017 die gleiche Adresse verwenden.

Zitat von: jensb am 09 Februar 2019, 19:43:16
Ich kenne mich mit dem MCP23017 nicht aus, aber es gibt ein paar I2C-Devices (z.B. MMA845X), die nur in einem besonderen I2C-Write/Read-Modus Daten ausspucken. Dieser Modus wird unter den Namen "repeated start" und "combined write/read" geführt und er müsste im Datenblatt beschrieben sein, wenn er gebraucht wird. Jedenfalls wäre dafür die Firmata Firmware zu patchen, denn es gibt dafür keine Einstellmöglichkeit über FRM. Habe das Datenblatt überflogen, konnte aber keinen Hinweis finden, es müsste also ein normales Write/Read reichen.

Es gibt keinen speziellen Modus. Die Register können einfach gelesen werden.


Klaus
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

R1F800

Das LCD Display hat doch die StandardAdresse "0x27"

Der MCP23017 alle Adresspins auf GND > 0x20

Ich werde mal versuchen "NUR" den MCP am I2C zu testen. > der PI steht offen an meinem Schreibtisch und der MCP und Rest ist auf einem BREADBOARD zusammengesteckt.

An einem ESP8266 funktioniert der MCP generell wunderbar. Aber auch hier werde ich noch einmal einen gegentest machen, um einen möglichen Defekt des Bauteils auszuschließen.

klausw

Zitat von: R1F800 am 11 Februar 2019, 11:09:49
Das LCD Display hat doch die StandardAdresse "0x27"

Der MCP23017 alle Adresspins auf GND > 0x20

schade, wäre ein einfacher Fehler gewesen  8)

Zitat von: R1F800 am 11 Februar 2019, 11:09:49
Ich werde mal versuchen "NUR" den MCP am I2C zu testen. > der PI steht offen an meinem Schreibtisch und der MCP und Rest ist auf einem BREADBOARD zusammengesteckt.
Wenn alles offen ist könntest du den MCP direkt an den I2C des Pi anschließen

Zitat von: R1F800 am 11 Februar 2019, 11:09:49
An einem ESP8266 funktioniert der MCP generell wunderbar. Aber auch hier werde ich noch einmal einen gegentest machen, um einen möglichen Defekt des Bauteils auszuschließen.
läuft auch Firmata auf dem ESP?
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

R1F800

Zitat von: klausw am 11 Februar 2019, 18:45:03
schade, wäre ein einfacher Fehler gewesen  8)
Ja, das stimmt... einfache Fehler wären zur Abwechslung mal schön.

Zitat von: klausw am 11 Februar 2019, 18:45:03
Wenn alles offen ist könntest du den MCP direkt an den I2C des Pi anschließen
Da könnte ich tun. Die Frage ist was wollen wir damit testen? Dass der MCP i.O. ist ?

Zitat von: klausw am 11 Februar 2019, 18:45:03
läuft auch Firmata auf dem ESP?
Nein, da läuft ESPeasy drauf.

klausw

Zitat von: R1F800 am 12 Februar 2019, 08:52:10
Da könnte ich tun. Die Frage ist was wollen wir damit testen? Dass der MCP i.O. ist ?
hmm macht wenig Sinn. Du hast ja schon geschaut ob er funktioniert.

Ich weiß nicht so recht wo wir da ansetzten können.
NAch der Analyse von Jens würde ich zusammenfassen:
- Botschaft wird korrekt von I2C_MCP23017 ans FRM Modul übertragen
- FRM Modul schickt die Botschaft raus.
- Es kommt Müll zurück
- I2C_MCP23017 Modul kommt eventuell nicht mit undefinierten Antworten zurecht

letzteres ist unschön aber nicht der Grund dafür das nix funktioniert.
Es scheint im Arduino schief zu gehen.
Versuche bitte über das Modul FRM_I2C Register aus dem MCP auszulesen.
Anstelle der Configurable Firmata kannst du auch den normalen Sketch nehmen. Da sollte I2C drin sein

Zitat von: R1F800 am 12 Februar 2019, 08:52:10
Nein, da läuft ESPeasy drauf.
Bedeutet, das es auch nicht über das Modul I2C_MCP23017.. geht?

Zitat von: jensb am 09 Februar 2019, 19:43:16
F0=START_SYSEX, 76=I2C_REQUEST, 20=I2C-Adresse, 08=periodisches Lesen (benötigt FRM-Attribut sampling-interval), 12000200=Payload, F7=END_SYSEX

Die Antwort müsste nun mit >f077 beginnen (77=I2C_REPLY) und sich unaufgefordert periodisch wiederholen. Statt dessen kommt:und das ist identisch mit dem Text "I2C: Too few bytes received". Diese Meldung erzeugt das Firmata-Device, wenn es ein I2C-Read absetzt, aber keine oder nur eine unverständliche Antwort erhält.
I2C_MCP23017 sendet:
        $sendpackage{direction} = "i2cread";
        $sendpackage{i2caddress} = 32;      (0x20)
   $sendpackage{reg} = 18;         (0x12)
   $sendpackage{nbyte} = 2;      

12000200=Payload  könnte zu 12 ... 02 (Register, Anzahl Bytes)

die Antwort
onI2CMessage address: '32', register: '18' data: [0,0]
vom Inhalt her auch. 0x12 und 0x13 müssten 0 sein wenn nix angeschlossen ist was den Pin Spannungsmäßig anhebt
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

R1F800

Ja, den MCP23017 spreche ich beim ESPeasy nicht mit I2C_MCP23017 an.

Die Kommunikation regelt alleine das ESPeasy. Ich spreche die Ports GPA / GPB via Socket nud Namen an, die ich im ESPeasy definiert habe.

define 123.123.123.123 80 ESPBridge Name_des_GPA

Nun, wie kann ich mich da jetzt weiter dem möglichen Fehler im I2C_MCP23017 nähern? 

klausw

Zitat von: R1F800 am 13 Februar 2019, 09:16:05
Nun, wie kann ich mich da jetzt weiter dem möglichen Fehler im I2C_MCP23017 nähern?

1. Ein paar Ports vom MCP auf VCC legen und schauen ob sich die Antwort im Log (verbose 5) ändert.

2. define <name> FRM_I2C <i2c-address> <register> <bytes-to-read>
sollte so aussehen denke ich: define <name> FRM_I2C 0x20 0x12 0x02
was kommt da zurück (auch im log)

3. Ist ConfigurableFirmata 2.06 überhaupt kompatibel zum aktuellen FHEM Modul? (laut FHEM Wiki ist 2.10.0 aktuell)
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

R1F800

ich werde das die kommenden Tage mal ausprobieren....

1. Einen Schalter hatte ich schon an einen PIN der dann auf VCC gezogen wird. >> kein Effekt

2. werde ich testen

3. das kann ich nciht sagen ... könnte ich updaten ... und neu flashen... aber dann haben wir zwei mögliche Fehlerquellen....
   eins nach dem anderen

R1F800

Zitat von: klausw am 13 Februar 2019, 15:18:29
1. Ein paar Ports vom MCP auf VCC legen und schauen ob sich die Antwort im Log (verbose 5) ändert.

2. define <name> FRM_I2C <i2c-address> <register> <bytes-to-read>
sollte so aussehen denke ich: define <name> FRM_I2C 0x20 0x12 0x02
was kommt da zurück (auch im log)

3. Ist ConfigurableFirmata 2.06 überhaupt kompatibel zum aktuellen FHEM Modul? (laut FHEM Wiki ist 2.10.0 aktuell)


zu 1) keine Reaktion
zu 2)
2019-03-06 10:33:09 FRM FIRMATA error: I2C: Too few bytes received
2019-03-06 10:33:09 I2C_MCP23017 NanoExpander transmission error
2019-03-06 10:33:26 FRM_I2C FRMnachI2C values:

zu 3) hier habe ich jetzt 2_10 aktiv

jensb

Da sind sich die FHEM-Module ja einig. Vom MCP23017 kommen wohl keine Daten, das war das ursprüngliche Analyseergebnis.

Mach den Test mit dem FRM_I2C mit deinem LCD-Display und ohne MCP23017. Dann solltest du Daten bekommen, wenn der Arduino und Firmata in Ordnung sind.

Wenn selbst ohne I2C-Devices beim Abfragen nichts aus SDA und SCL-Pins heraus kommt, hat der Arduino (oder die Firmata-Firmware) ein Problem. Mit MCP23017 müsste die Pulsfolge länger werden. Nimm ein Digi-Scope und versuch das zu überprüfen. Schau dir auch die Pulsform an. Sie muss nicht genau rechteckig sein, aber Spikes sind z.B. ein Problem. Auch dafür kannst du das LCD-Display zum Vergleich heranziehen.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

R1F800

NUR das LCD dran, welches auch Daten selber empfängt und auch anzeigt.

define testI2C FRM_I2C 0x20 0x12 0x02
>>>
2019-03-08 08:25:17 FRM_I2C testI2C values:
2019-03-08 08:25:17 FRM_I2C testI2C values:

Zum Verständnis

(PI) <Ethernet> (nano mit ETH shield und configurableFirmata) <I2C> LCD / MCP23017

So sollte der Datenfluss eigentlich aussehen...

jensb

Hier fehlt "FRM FIRMATA error: I2C: Too few bytes received" - trotzdem wurde scheinbar nichts empfangen.

Kannst du mit Set über FRM_I2C irgendeine Änderung auf dem LCD erreichen, die man sehen kann? Dann wüsste man wenigstens, ob was ankommt. Ansonsten: DigiScope

Wenn du kein DigiScope hast, dann reduziere deinen Aufbau auf ein Minimum, also z.B. nur Arduino + LCD und spiele einen Mini-Arduino-Sketch ein, der was mit dem Display macht. Klappt das, dann das gleiche noch mal mit dem MCP23017. Geht auch das, dann mit beiden gleichzeitig.

Klappt auch das, kommt wieder Firmata ins Spiel und zunächst nur wieder das LCD. Mich würde dann interessieren, was mit verbose=5 ab TCP Connect bis zum 1. Lesezugriff über Firmata gesendet und empfangen wurde.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

R1F800

Zitat von: jensb am 08 März 2019, 21:32:07
Hier fehlt "FRM FIRMATA error: I2C: Too few bytes received" - trotzdem wurde scheinbar nichts empfangen.

Kannst du mit Set über FRM_I2C irgendeine Änderung auf dem LCD erreichen, die man sehen kann? Dann wüsste man wenigstens, ob was ankommt. Ansonsten: DigiScope

Wenn du kein DigiScope hast, dann reduziere deinen Aufbau auf ein Minimum, also z.B. nur Arduino + LCD und spiele einen Mini-Arduino-Sketch ein, der was mit dem Display macht. Klappt das, dann das gleiche noch mal mit dem MCP23017. Geht auch das, dann mit beiden gleichzeitig.

Klappt auch das, kommt wieder Firmata ins Spiel und zunächst nur wieder das LCD. Mich würde dann interessieren, was mit verbose=5 ab TCP Connect bis zum 1. Lesezugriff über Firmata gesendet und empfangen wurde.

Grüße,
Jens

Ja klar... das LCD ändert wie gwünscht die Daten auf dem Display. SO wie ich es schicke.

jensb

Verstehe ich das richtig? Du kannst mit FRM_I2C auf das LCD-Display schreiben, aber nicht lesen?

Hast du vielleicht eine Mischung von 3,3V und 5,0V Busteilnehmern?
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb