Raspi2 GPIO active_low

Begonnen von Atze, 08 Juli 2015, 13:38:48

Vorheriges Thema - Nächstes Thema

klausw

Zitat von: Atze am 10 Juli 2015, 15:10:20
Au man..   >:(

Wenn ich ein "gpio readall" absetze, sehe ich das alles funktioniert. Bei wheezy und auch bei jessie.

Warum auch immer wird im Fhem das reading aber falsch angezeigt. (Oder hab ich was vollkommen falsch verstanden ?)

(http://fs2.directupload.net/images/150710/zyg9abfn.jpg)
Alles sehr seltsam.
Verwende bitte mal kein gpio utility
Vielleicht zeigt "gpio readall" wirklich den Pegel am Pin an. Vielleicht überschreibt es den Wert in active_low.

Nur mit:

cat /sys/class/gpio/gpio11/value
cat /sys/class/gpio/gpio11/active_low

den Pinstatus überprüfen.

Wenn das immmer noch so komisch ist, dann bitte einen anderen GPIO testen (einen ohne Zusatzfunktion)
Nicht das bei dir die SPI aktiv ist. In diesem Fall sollte der GPIO eigentlich blockiert sein, aber wer weiss.
Das MISO und MOSI auf ALT0 stehen ist schon ein Zeichen dafür, das die SPI aktiv ist.

Ich habe nochmal bei mir geschaut. Das Reading Pinlevel zeigt den Wert der value Datei an. Und active_low invertiert das ganze (für lesen und schreiben).
Das funktioniert definitiv.
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

Atze

Die Dateien werden korrekt beschrieben. Gleiches verhalten bei anderen Pin's.

ZitatDas Reading Pinlevel zeigt den Wert der value Datei an. Und active_low invertiert das ganze
und genau das scheint bei mir nicht zu funktionieren.
FHEM 5.8 , RPi 2 / CUL 3.2 / JEELINKnano - PCA301 / nanoCUL a-culfw 1.05.03
HMS: rm1002, s300th / FHT: fht8v-3, fht80tf
FS20: fs20st, fs20sm8, fs20s8m, fs20rsu, fs20rbm, fs20pce, fs20pcs, fs20ue1, fs20irp2, fs20dwt, fs20rpt-3, fs20str-2, fs20kse
IT: ITDM-250, ITLS-16, ITW-852, IT-1500
G-Data Milight

klausw

Zitat von: Atze am 11 Juli 2015, 09:03:18
Die Dateien werden korrekt beschrieben. Gleiches verhalten bei anderen Pin's.
Ok, das mach das Modul aber was es soll.
Das Problem liegt scheinbar darin, das der Inhalt der Datei active_low anders interpretiert wird.

Ich fasse zusammen:
attr active_low = no
attr direction output

set gpioxx on
-> gpio wird high geschaltet
(Dateien: value=1; active_low=0)

set gpioxx off
-> gpio wird low geschaltet
(Dateien: value=0; active_low=0)

----------
attr active_low = yes
attr direction output

set gpioxx on
-> gpio wird high geschaltet (hier müsste er eigentlich auf low schalten, also Gegenteil von value Datei)
(Dateiinhalte: value=1; active_low=1)

set gpioxx off
-> gpio wird low geschaltet  (hier müsste er eigentlich auf high schalten, also Gegenteil von value Datei)
(Dateiinhalte: value=0; active_low=1)

Ist das so richtig?

Das würde heissen, der Inhalt von active_low hat keinen Einfluss.
Kannst du bitte probieren, ob er bei direction Input einen Einfluss hat?

Evtl. kann ich noch ein Attribut einbauen, das die Invertierung im Modul selbst vornimmt. Dann wären wir unabhängig von der active_low Datei.
Aber verstehen möchte ich es trotzdem.
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

Atze

Hallo,

ZitatDas würde heissen, der Inhalt von active_low hat keinen Einfluss.
Kannst du bitte probieren, ob er bei direction Input einen Einfluss hat?

genauso so ist es bei meinem Pi2.

Gruss Andreas
FHEM 5.8 , RPi 2 / CUL 3.2 / JEELINKnano - PCA301 / nanoCUL a-culfw 1.05.03
HMS: rm1002, s300th / FHT: fht8v-3, fht80tf
FS20: fs20st, fs20sm8, fs20s8m, fs20rsu, fs20rbm, fs20pce, fs20pcs, fs20ue1, fs20irp2, fs20dwt, fs20rpt-3, fs20str-2, fs20kse
IT: ITDM-250, ITLS-16, ITW-852, IT-1500
G-Data Milight

klausw

Zitat von: Atze am 17 Juli 2015, 14:20:33
Hallo,

genauso so ist es bei meinem Pi2.

Gruss Andreas
Kannst du das bitte genauer Beschreiben?
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

Atze

Test ohne active_low.

attr active_low = no
attr direction output

set gpioxx on
-> gpio wird high geschaltet
Dateiinhalt kontrolliert: value=1; active_low=0

set gpioxx off
-> gpio wird low geschaltet
Dateiinhalt kontrolliert: value=0; active_low=0


Test mit active_low.

attr active_low = yes
attr direction output

set gpioxx on
-> gpio wird laut  fhem "high" geschaltet, soll "low" (gpio readall zeigt 0) 
Dateiinhalt kontrolliert: value=1; active_low=1

set gpioxx off
-> gpio wird laut  fhem "low" geschaltet, soll "high" (gpio readall zeigt 1) 
Dateiinhalt kontrolliert: value=0; active_low=1

Also wie du gesagt hast. Die Invertierung funktioniert ja, nur das reading stimmt nicht.
FHEM 5.8 , RPi 2 / CUL 3.2 / JEELINKnano - PCA301 / nanoCUL a-culfw 1.05.03
HMS: rm1002, s300th / FHT: fht8v-3, fht80tf
FS20: fs20st, fs20sm8, fs20s8m, fs20rsu, fs20rbm, fs20pce, fs20pcs, fs20ue1, fs20irp2, fs20dwt, fs20rpt-3, fs20str-2, fs20kse
IT: ITDM-250, ITLS-16, ITW-852, IT-1500
G-Data Milight

klausw

Zitat von: Atze am 17 Juli 2015, 16:48:43
Test ohne active_low.

attr active_low = no
attr direction output

set gpioxx on
-> gpio wird high geschaltet
Dateiinhalt kontrolliert: value=1; active_low=0

set gpioxx off
-> gpio wird low geschaltet
Dateiinhalt kontrolliert: value=0; active_low=0


Test mit active_low.

attr active_low = yes
attr direction output

set gpioxx on
-> gpio wird laut  fhem "high" geschaltet, soll "low" (gpio readall zeigt 0) 
Dateiinhalt kontrolliert: value=1; active_low=1

set gpioxx off
-> gpio wird laut  fhem "low" geschaltet, soll "high" (gpio readall zeigt 1) 
Dateiinhalt kontrolliert: value=0; active_low=1

Also wie du gesagt hast. Die Invertierung funktioniert ja, nur das reading stimmt nicht.
Ich glaube es gibt ein Verständnisproblem.
Ich versuche das mal aufzuklären 8)

Das Reading in Fhem soll immer den Wert der value Datei anzeigen.
Evtl. ist das etwas verwirrend.
Ein setzen von active_low invertiert nur den Ausgang. Also 0 in der Value Datei entspricht dann 3,3V am Pin und 1 entspricht 0V.
Das macht z.B. Sinn wenn man ein Relais an den Gpio anschließt, dessen Treiberschaltung das Relais bei 0V einschaltet und bei 3,3V aus. In diesem Fall kann man nach setzen von active_low mit "set ... on" das Relais wie gewohnt einschalten.
Das wiringpi gpio utility schein wirklich den Wert am Pin auszugeben. Das macht aber meiner Meinung nach keinen Sinn. Wozu benötigt ich dann active_low noch.
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

Atze

Aber wenn das active_low auf yes gesetzt ist und ich mein Device auf on setze sollten doch die Readings:

STATE=ON
PINLEVEL=LOW

heissen.
oder ?

Edit. Die Readings sind immer On und High bei eingeschaltetem Device
FHEM 5.8 , RPi 2 / CUL 3.2 / JEELINKnano - PCA301 / nanoCUL a-culfw 1.05.03
HMS: rm1002, s300th / FHT: fht8v-3, fht80tf
FS20: fs20st, fs20sm8, fs20s8m, fs20rsu, fs20rbm, fs20pce, fs20pcs, fs20ue1, fs20irp2, fs20dwt, fs20rpt-3, fs20str-2, fs20kse
IT: ITDM-250, ITLS-16, ITW-852, IT-1500
G-Data Milight

klausw

Zitat von: Atze am 17 Juli 2015, 17:28:50
Aber wenn das active_low auf yes gesetzt ist und ich mein Device auf on setze sollten doch die Readings:

STATE=ON
PINLEVEL=LOW

heissen.
oder ?

Edit. Die Readings sind immer On und High bei eingeschaltetem Device
Nein, der Pinlevel wird nur beim aufrufen der Device Seite aktualisiert. Prinzipiell sollte er das gleiche anzeigen wie state. Es ist nicht der physikalische Pinlevel . Ich weiss ehrlich gesagt auch nicht mehr wieso ich den eingeführt hatte.
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

blecher-at

Der angehängte Patch sorgt dafür dass der physikalische pinlevel angezeigt wird (berücksichtigt active_low), und auch beim schalten aktualisiert wird.

blecher-at

Das ursprüngliche problem (active_low rechte) wird von einem bug im WiringPI verursacht. Der setzt die rechte beim export nicht korrekt - und damit hat fhem keinen zugriff auf das file.
Ich hab pull-requests für das tool erstellt. Ist vielleicht hilfreich und kommt ohne workarounds/extra scripte aus, man muss einfach die angepasst wiringpi version (siehe unten) installieren.

Raspberry PI: https://github.com/WiringPi/WiringPi/pull/55
Orange PI Zero: https://github.com/xpertsavenue/WiringOP-Zero/pull/15