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

fruemmel

Zitat von: klausw am 21 Januar 2014, 10:01:48
Das machst du mit einem Script nach jedem reboot?

Ich habe gerade einen reboot gemacht (vom Pi), bei mir "überlebt" fhem als owner der Dateien.

klausw

Ok, das ist interessant. Verstehen kann ich's aber nicht. Die Dateien existieren ja praktisch nicht. Sie werden beim booten erzeugt.
Aber Hauptsache es geht ;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

ollir

#47
Hallo Klaus,

neben meiner Frage, ob es möglich die PWM-Funktion mit einzubauen habe ich noch eine weitere:

Wäre es möglich bei der Interrupt-Funktion (both) die Impulsdauer in den Readings anzuzeigen?

Mein Ziel wäre es die Dauer eines Impulses zu messen um HC-SR04 Ultraschall Sensoren einzubinden.
hier ein Beispiel: http://www.gtkdb.de/index_36_2272.html

Man könnte dann über einen GPI-Out einen Impuls auf den Triggereingang geben und bekommt über Echo auf einen Interrupteingang einen Impuls mit der Dauer in Abhängigkeit von der Entfernung zurück.

Vielen Dank
Olaf

EDIT: Mangels Perl kann ich leider noch nicht viel programmieren. Habe hier jedoch weitere Infos gefunden:
http://www.tinkerforge.com/de/doc/Software/Bricklets/DistanceUS_Bricklet_Perl.html#distance-us-bricklet-perl-examples

klausw

Hallo Olaf

Dein Beitrag war mir durch die Lappen gegangen ...so als letzer auf einer Seite ;)

Zitat von: ollir am 21 Januar 2014, 11:01:57
Wenn ich das richtig verstehe setzt du WiringPi auf?

jein, ich nutze nur das gpio Tool von wiringpi um die GPIO's als Normaluser exportieren zu können.
Danach greife ich über das Dateisystem auf die Ports zu. Auf diesem Weg funktioniert das mit der Software PWM nicht. Auch das gpio Tool kann keine PWM Werte setzen. Ich habe noch ein weiteres Programm gefunden, welches angeblich Software PWM auf allen Ports ermöglicht. Dazu brauche ich aber eine ruhige Minute.

Das mit der Impulsdauer kann ich versuchen, am We habe ich denke ich etwas Zeit.
Hast du so ein Modul? Ich bin nicht sicher, ob das in FHEM schnell genug geht. Da kommt es schließlich auf ein paar ms an.

Grüße
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

ollir

Hallo Klaus,

leider habe ich noch kein HC-SR04 Modul.
Werde gleich mal ein paar bestellen.

Ich dachte mir man könnte mit der steigenden Flanke einen Timer starten und diesen mit der fallenden Flanke stoppen. Die abgelaufene Timerzeit dann als Rückgabewert.
Die Berechnung der Distanz könnte im UserReading geschehen.

Wann und wie oft der HC-SR04 messen soll, wird über den Trigger Eingang gesteuert.
Für seltene Messungen (z.B. Zizterne) einen GPI_Out über FHEM kurz Schalten.

Für stetige und schnelle Messungen (z.B. Abstandsmessung Haustüre) müsste man ca. 20ms Impulse auf den Trigger Eingang erzeugen.

Vielen Dank

Olaf

klausw

Für 1cm musst du auf 3ms auflösen können ... ich weiss nicht wie die Looptime vom FHEM ist, aber das erscheint mir sportlich.
Organisiere lieber erstmal nur eins ;)
Die Tür kannst du doch mit einem Kontakt machen, oder nimm ein PIR Modul ... gibts für 5V und kostet keine 5€
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

backbone10

Hi,
ich habe zwei Fragen, für die ich trotz SUFU und Wiki nicht lösen konnte :)

1.Hat schon jemand das Attribut "active_low" erfolgreich eingesetzt ? ich habs probiert, bei den Readings in FHEM ändert sich aber nichts bei mir. Oder ich verstehe das ganze falsch, ich hab eine kleine Schaltung angeschlossen, die Level High liefert, wenn der Zustand off ist - vielleicht ist es nicht für das gemacht.....

2. Die Zeilen im Modul selbst sind mir nicht klar

Bei  interrupt both wird ein reading Longpress angelegt, welches auf on gesetzt wird solange der Pin länger als 1s gedrueckt wird<br>
     Bei "falling" und "rising" wird ein reading Toggle angelegt, das bei jedem Interruptereignis toggelt und das Reading Counter, das bei jedem Ereignis um 1 hochzählt..

Ist das so richtig verstanden, dass bei "both" keine Counter mitgezählt werden?? - wenn ja wie heisst der Counter genau ??

danke

bb10


klausw

Zitat von: backbone10 am 26 Januar 2014, 21:16:22
1.Hat schon jemand das Attribut "active_low" erfolgreich eingesetzt ? ich habs probiert, bei den Readings in FHEM ändert sich aber nichts bei mir. Oder ich verstehe das ganze falsch, ich hab eine kleine Schaltung angeschlossen, die Level High liefert, wenn der Zustand off ist - vielleicht ist es nicht für das gemacht.....
Doch, dafür isses gemacht. Allerdings funktioniert es wirklich nicht mehr. Das Attribut hatte ich bei der Umstellung auf WiringPi übersehen. Werde ich beim nächsten Update mit reinbringen.
Zitat von: backbone10 am 26 Januar 2014, 21:16:22
Bei  interrupt both wird ein reading Longpress angelegt, welches auf on gesetzt wird solange der Pin länger als 1s gedrueckt wird<br>
     Bei "falling" und "rising" wird ein reading Toggle angelegt, das bei jedem Interruptereignis toggelt und das Reading Counter, das bei jedem Ereignis um 1 hochzählt..

Ist das so richtig verstanden, dass bei "both" keine Counter mitgezählt werden?? - wenn ja wie heisst der Counter genau ??
Die Frage verstehe ich nicht. Der Counter heisst Counter :).
Der Counter zählt nur bei "falling" und "rising" bei entsprechendem Ereignis um eins hoch. Bei "both" würde jeder Tastendruck doppelt zählen...macht meiner Meinung nach keinen Sinn
Toggle funktioniert auch nur bei "falling" und "rising". Bei "both" macht es auch keinen Sinn, sonst müsste man noch ein weiteres Attribut einfügen, um festzulegen bei welchem Flankenwechsel der Toggel umgeändert werden soll.
Der Interrupt ist nur Mittel zum Zweck.
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

backbone10

Hi klausw,
danke für die prompte Antwort.
Punkt 1 ist damit klar.
Punkt 2 habe ich aufgrund meiner bescheidenen Erfahrung schlecht dargestellt. Ich hab mir überlegt, den Counter als Zähler für die Einschaltereignisse zu verwenden, auch wenn ich ihn durch2 dividiere. Muß noch ein wenig spielen damit, sorry..
mfg

bb10

klausw

gern geschehen

wenn bei dir Einschalten = wechsel von 0 auf 1 am GPIO bedeutet, kannst du interrupt auf "rising" stellen und schon wird jedes Einschaltereignis gezählt. Du musst nix durch 2 dividieren.
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

Maergsche

Hallo ollir,

so ein HC-SR04 wäre absolut gut um einen Wassertank  oder Oeltank zu überwachen .... Hast Du vor das Thema noch zu verfolgen?

ollir

Zitat von: Maergsche am 27 Januar 2014, 16:45:30
Hallo ollir,

so ein HC-SR04 wäre absolut gut um einen Wassertank  oder Oeltank zu überwachen .... Hast Du vor das Thema noch zu verfolgen?
Ich habe Klaus's Modul mit einem Rückgabewert (gettimeofday welcher bis mircosekunden zurück gibt) bei der Interrupterkennung (Rising/Falling) ergänzt.
Ob es funktioniert werde ich sehen, wenn die Sensoren da sind.
Ich weis nur nicht in welchem Zeitfenter die Interrupterkennung reagiert.
Werde dran bleiben und berichten.

VG
Olaf

klausw

Zitat von: ollir am 27 Januar 2014, 19:29:25
Ich weis nur nicht in welchem Zeitfenter die Interrupterkennung reagiert.
Werde dran bleiben und berichten.
Ich habe auch mal testweise ein Reading eingefügt, welches die on Zeit darstellt.
Jetzt fehlt nur noch ein kurzer Impuls zum testen. Wenn Du es vor mir schaffst gib Bescheid und ich baue es ein.
Vermute aber das man nicht unter 100ms kommt.
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

ollir

#58
Hallo Klaus,

mangels externen Generator kann ich die Funktion auch nicht genau testen. Zur Zeit gebe ich über einen GPI-Out einen Impuls aus.
Mit diesem komme ich auch nicht kleiner als ca. 100ms.
Ich denke es liegt aber an dem Ausgabe-Impuls der über FHEM ausgegeben wird.

Ich hoffe das mit einen Externen Impuls die Zeitangabe über Interrupt wesentlich kürzer und genauer funktioniert.

Würdest die Zeitangabe über HiPi::Interupt::Message ($msg->timestamp Returns an epoch timestamp in milliseconds for the message.) machen?
Evtl. ist dies noch genauer/schneller als im Modul selber über (gettimeofday)?

VG
Olaf


klausw

Hi Olli,
Zitat von: ollir am 28 Januar 2014, 11:35:29
Würdest die Zeitangabe über HiPi::Interupt::Message ($msg->timestamp Returns an epoch timestamp in milliseconds for the message.) machen?
Evtl. ist dies noch genauer/schneller als im Modul selber über (gettimeofday)?
HiPi nutze ich für das Modul nicht mehr. Es macht keinen Sinn, da für die Interruptfunktionen der Prozess geforkt werden muss und das hat im Zusammenhang mit FHEM nicht funktioniert. Ausserdem war die Vorarbeit für diese Bibliothek recht umständlich.

Ich werde versuchen die Interruptverarbeitung noch ein bisschen zu optimieren. Zum testen leihe ich mit einen Funktionsgenerator von Arbeit aus. Evtl. komme ich am We dazu.
Wenn das alles nichts hilft könntest Du ein zusätzliches Script schreiben, auf das Du von FHEM aus zugreifst. Ich hatte mal ein python script dafür getestet. Das lieferte einigermaßen brauchbare Werte.
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