Modul für RPi GPIO Zugriff mit Interrupt Funktion für Input

Begonnen von klausw, 15 November 2013, 14:28:41

Vorheriges Thema - Nächstes Thema

Apollo

Bin zwar noch beim Einrichten des I2C, aber den Interrupt auf den GPIOs konnte ich mit einem frischen System schon mal erfolgreich testen.

klausw

Super, es wäre zwar interessant, woran es gelegen hat. Aber so weisst du schonmal, das die Hardware Ok ist
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

IPPhoner2b

Hallo zusammen,

Ich hoffe, ich verhalte mich nicht falsch, weil ich ein Neuling im Forum bin.

Ich habe einen Raspberry Pi mit Fhem aufgesetzt, und möchte damit über den I2C-Bus 4 MCP23017 Chips ansprechen.
Konkret möchte ich damit die Rollos kabelgebunden steuern. Von der Hardware Seite funktioniert schonmal alles. Jetzt geht es um die Software.

Ich habe mal testweise ein Python Script zum ansteuern der Ausgänge getestet, und in dem Script mit WiringPi2 gearbeitet. Die Bedienung finde ich als Einsteiger sehr einfach.

Gibt es eine Möglichkeit mit dem GPIO Modul von euch, auch die MCP Bausteine komfortabel anzusteuern?
Also ich würde gerne von den insgesamt 64 zur Verfügung stehenden Ports, 16 als Eingänge von Schaltern überwachen, und 48 als Ausgänge.

Wobei ich zum testen auch mit 4 Eingängen und 16 Ausgängen klar komme.

Könnt ihr mir da helfen? Ein Riesen Schritt wäre ja, wenn ich mit GPIO die MCP's ansprechen könnte, und wenn mir kurz ne Hilfe bzgl der Eingänge gegeben werden könnte, ob dass bei den Porterweiterungen auch über "Verzeichnisse" klappt.

Falls ich falsch sein sollte, oder es unpassend ist, bitte ich vielmals um Entschuldigung.

Ansonsten schon mal vielen Dank im Voraus.

Gruß
Christian

klausw

Zitat von: IPPhoner2b am 07 April 2014, 22:09:51
Gibt es eine Möglichkeit mit dem GPIO Modul von euch, auch die MCP Bausteine komfortabel anzusteuern?
kurz gesagt nein
Das Modul ist ausschließlich für die GPIO's des Raspberry gedacht.
Es gibt noch ein weiteres Modul um I2C Bausteine am Raspberry anzusteuern.
Hier und hier
Allerdings gibt es da noch kein fertiges Modul für den MCP....das muss erst noch geschrieben werden.
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

Apollo

#94
so ähnlich versuche ich das auch gerade, nur dass ich für die Schaltausgänge den PCF8574 verwende, die Eingänge realisiere ich auch über den MCP23017.
Das Auslesen und Auswerten des MCP23017 ist recht einfach.
Auf dem Pin7 (GPIO4) habe ich den Interrupt des MCP23017. Der Port wird vom GPIO Interrupt überwacht.
Eine Änderung lößt ein Notify aus, dass dann die Auswertung übernimmt.
Pin7.off {
     my $wa = fhem("get bus read 21 12") + 0;
     my $wb = fhem("get bus read 21 13") + 0;
     if ($wa & 1) {fhem ("set IC1_A0 on")} else {fhem ("set IC1_A0 off")}
     if ($wa & 2) {fhem ("set IC1_A1 on")} else {fhem ("set IC1_A1 off")}
     if ($wa & 4) {fhem ("set IC1_A2 on")} else {fhem ("set IC1_A2 off")}
     if ($wa & 8) {fhem ("set IC1_A3 on")} else {fhem ("set IC1_A3 off")}
     if ($wa & 16) {fhem ("set IC1_A4 on")} else {fhem ("set IC1_A4 off")}
     if ($wa & 32) {fhem ("set IC1_A5 on")} else {fhem ("set IC1_A5 off")}
     if ($wa & 64) {fhem ("set IC1_A6 on")} else {fhem ("set IC1_A6 off")}
     if ($wa & 128) {fhem ("set IC1_A7 on")} else {fhem ("set IC1_A7 off")}
     if ($wb & 1) {fhem ("set IC1_B0 on")} else {fhem ("set IC1_B0 off")}
     if ($wb & 2) {fhem ("set IC1_B1 on")} else {fhem ("set IC1_B1 off")}
     if ($wb & 4) {fhem ("set IC1_B2 on")} else {fhem ("set IC1_B2 off")}
     if ($wb & 8) {fhem ("set IC1_B3 on")} else {fhem ("set IC1_B3 off")}
     if ($wb & 16) {fhem ("set IC1_B4 on")} else {fhem ("set IC1_B4 off")}
     if ($wb & 32) {fhem ("set IC1_B5 on")} else {fhem ("set IC1_B5 off")}
     if ($wb & 64) {fhem ("set IC1_B6 on")} else {fhem ("set IC1_B6 off")}
     if ($wb & 128) {fhem ("set IC1_B7 on")} else {fhem ("set IC1_B7 off")}}

"bus" ist das RPII2C Modul, die Adresse des ICs ist in meinem Fall 21, IC1_A0 bis IC1_B7 sind Dummys

klausw

Wieso nicht einfach ein Modul schreiben. Ich bin grade bisschen beschäftigt und habe auch nix mit nem Mcp. Aber wenn jemand das Modul für den Mcp... weiterschreiben will bitte Pn an mich.
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

IPPhoner2b

#96
Wow, das ging ja schnell mit antworten.

Danke schon mal dafür.

Wenn du sagst, "ein Modul für den mcp weiterschreiben"

Ich habe gestern mal nen flüchtigen Blick auf das GPIO Script geworfen. Das ist zwar nicht wirklich meine Welt, aber wenn ich nur die Ein- und Ausgänge des MCP auswerten und setzen möchte, und dies (weil zum verstehen einfacher)  mit WiringPi2 realisieren möchte, was muss ich da konkret machen?

HHabe vor 3 Jahren für dieses Avr-Net-Io Bord von Pollin ein paar Programme geschrieben, deswegen ist das nicht so ganz fremd, und mir geht es ja nur um diese "einfachen"  Sachen und nix kompliziertes.

Also wenn mir nur ne gaaaaanz kurze Crash Einweisung gegeben würde, würde ich mich gerne dran versuchen.

Kann man die Python Befehle da fast übernehmen, oder in welcher Sprache muss das geschrieben werden?  (Perl)

Jedenfalls Respekt vor der Arbeit.

:EDIT:

@Apollo,
das sieht auch schonmal sehr interessant aus.
Kannst du mir bei den Bezeichnungen in deinem Script helfen, welche Bezeichnungen was bedeuten?

Da ich echt noch Neuling bin, was heißt, dass du den Interupt des MCP auf den GPIO 4 gelegt hast?
Und könntest du mir bitte noch erklären, wie du die Dummys angelegt hast, oder wo ich das alles nachlesen kann?

Vielen Dank im voraus
Gruß Christian

klausw

Zitat von: IPPhoner2b am 08 April 2014, 06:01:15
Das ist zwar nicht wirklich meine Welt, aber wenn ich nur die Ein- und Ausgänge des MCP auswerten und setzen möchte, und dies (weil zum verstehen einfacher)  mit WiringPi2 realisieren möchte, was muss ich da konkret machen?
Mit WiringPi kann ich Dir nicht helfen, da ich es nicht nutze (mit Ausnahme des gpio tools zur Rechteanpassung). Ehrlich gesagt will ich es auch nicht nutzen, weil es keine Standardlösung für FHEM bringt und sich jeder selbst was zurecht basteln muss. Ein eigenes Modul für den MCP könnte jeder nutzen (sogar auf anderen Systemen).

Das RPI_GPIO Modul ist auch das falsche. Du müsstest Dir das I2C_PCF8574 anschauen. So ähnlich muss auch das Modul für den MCP aussehen. Es ist, wie FHEM auch, in Perl geschrieben. Wenn man es sich mal in Ruhe anschaut ist es eigentlich auch recht logisch aufgebaut ;) (ich bin auch auf diese Weise in die Modulprogrammierung rein gekommen). Ich suche mal nach meiner ersten Version für den I2C_MCP23017 und stelle sie hier ein.
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

IPPhoner2b

Ja ok,
Das macht Sinn, dass man nicht das Rad neu erfinden muss, und wenn das mit dem GPIO auch soweit funktioniert, und ich es verstehe, wäre es mir auch egal, wie ich es ansprechen muss.

Dann werde ich mir mal die Datei für den PCF... ansehen, und so wenigstens die Ausgänge komfortabel setzen zu können. Das ist super nett von dir, wenn ich mir deine Datei anschauen kann, und noch besser wäre es, wenn ich dann auch hier und da mal Tipps bekommen kann.

Was meinst du denn, sollte ich die Eingänge wie Apollo das gemacht hat abfragen, oder geht dass dann auch mit dem "Modul"?

Wie geht das denn mit der Eingangsabfrage über den GPIO 4, habe schonmal nach gesucht, aber noch nicht viel zufriedenstellendes gefunden.

klausw

Zitat von: IPPhoner2b am 08 April 2014, 21:21:04
Dann werde ich mir mal die Datei für den PCF... ansehen, und so wenigstens die Ausgänge komfortabel setzen zu können. Das ist super nett von dir, wenn ich mir deine Datei anschauen kann, und noch besser wäre es, wenn ich dann auch hier und da mal Tipps bekommen kann.

Was meinst du denn, sollte ich die Eingänge wie Apollo das gemacht hat abfragen, oder geht dass dann auch mit dem "Modul"?

Wie geht das denn mit der Eingangsabfrage über den GPIO 4, habe schonmal nach gesucht, aber noch nicht viel zufriedenstellendes gefunden.
Ok, lass mich das Modul noch an die neue Schnittstelle zu den I2C Modulen anpassen.
Du kannst dann mit dem MCP.... Modul sämtliche GPIO des IC direkt als Ein oder Ausgänge nutzen. In diesem Modul sollte auch der Interrupt konfiguriert werden.
Den Interrupt Ausgang kannst Du dann an jeden beliebigen GPIO der Raspberry anschließen und über die Interrupt Funktion des Moduls Rpi_GPIO das auslesen der Portpins vom MCP starten.
So kannst Du ohne den Prozessor zu belasten die Portpins als Input nutzen.
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

klausw

#100
So hier das Modul für den MCP23017

In Ermangelung eines Testsamples kann ich es nicht selbst testen.
Über die Attribute:
OutputPorts
Pullup
active_low
Interrupt

Können einige Konfigurationen ausgeführt werden.
Die Werte für die Attribute müssen Kommagetrennte Portbezeichnungen sein.
z.B A1,B4,B7
Wenn es funktioniert werde ich es einchecken.
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

IPPhoner2b

Hallo Klaus,

Vielen Dank schonmal für deine Unterstützung, heute und morgen werde ich wohl noch keine Zeit dafür haben, aber ich hoffe, nächste Tage dann mal die Ruhe dafür zu haben.

Also mit den Interrupt d.h. Also den Pin IntA oder IntB auf den GPIO z.b. pin4 des RPI zu legen, richtig?

Über den Befehl Pullup kann ich also für die Eingänge die internen Pullup Widerstände aktivieren?!

Herrje, ich habe wirklich noch viel vor mir, und ich glaube zur Sicherheit könnte ich dem Klaus noch nen Satz MCP23017 zukommen lassen. Wenn du dann mal in ferner Zukunft die Lust verspürst eine "richtige funktionierende" Version zu erstellen, dann wäre anderen Usern auch direkt geholfen.

Ich bin ja immer dankbar, dass es so Leute gibt, die sich so selbstlos einsetzen *Alle Daumen hoch*  :) :)

Gruß Christian

klausw

gern geschehen  8), alleine hätte ich es aber auch nicht hinbekommen
Selbstlos isses ja nicht. Den MCP hatte ich auch schonmal ins Auge gefasst.

Zitat von: IPPhoner2b am 10 April 2014, 20:33:38
Also mit den Interrupt d.h. Also den Pin IntA oder IntB auf den GPIO z.b. pin4 des RPI zu legen, richtig?
Genau, im Moment müssen die beide auf getrennte GPIO's. Sobald ich weitere Konfigurationsregister eingebaut habe lassen die sich auch zusammenschließen bzw. intern verbinden.

Zitat von: IPPhoner2b am 10 April 2014, 20:33:38
Über den Befehl Pullup kann ich also für die Eingänge die internen Pullup Widerstände aktivieren?!
yepp... 100k Pullup Pinselektiv

Zitat von: IPPhoner2b am 10 April 2014, 20:33:38
Herrje, ich habe wirklich noch viel vor mir, und ich glaube zur Sicherheit könnte ich dem Klaus noch nen Satz MCP23017 zukommen lassen. Wenn du dann mal in ferner Zukunft die Lust verspürst eine "richtige funktionierende" Version zu erstellen, dann wäre anderen Usern auch direkt geholfen.
Na ich hoffe doch, das die Version schon richtig funkioniert  :D
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

IPPhoner2b

Was würde ich nur ohne dich machen  ;D  ::)

Du bist so gut zu mir  ;)

Dann werde ich mich morgen mal dran setzen, und schauen wie ich das alles gestemmt bekomme, meine weiteren Fragen werde ich wohl hier wieder kund tun  :o

Gruß Christian

IPPhoner2b

S, ich werde den RPi zur Sicherheit doch nochmal komplett neu aufsetzen, hatte ja doch hier und da sachen drin, die dort nicht hingehören.

Nur ne kurze Frage bzgl der ganzen Dinge, die installiert werden müssen.
Basis: Raspian Wheezy vom 07.01.2014 und updaten
dann im groben und ganzen Fhem installieren und updaten

- den I2C Bus aktivieren und die I2C-Tools und WiringPi installieren

Gibt es da einen Unterschied, ob ich WiringPi oder WiringPi2 installiere? Habe momentan die ...2 drauf, weiß aber nicht, ob das kompatibel ist.

Und dann könnte es doch in groben schritten schon fast losgehen, um die "Defines" einzurichten, oder?

Gruß
Christian