Hallo zusammen,
ich hab mir das Modul 51_RPI_GPIO.pm angesehen, weil ich gerne über GPIO und ein Schieberegister (z.B. 4094) viele Ausgänge (ca. 40, und evtl. später auch viele Eingänge) ansteuern will, indem ich Daten (DATA) mit einem Takt (CLOCK) bitweise rausschiebe und dann mit einem STROBE übernehme. Ich nutze einen RaspberryPi B+ mit Raspbian und fhem 5.6. Ich will einen bestehenden PIC durch den RasPi ersetzen, so dass ich die im Haus verbaute Schaltung erst mal gerne erhalten würde 8).
Ich hab soweit verstanden, dass man die GPIO unter linux über 2 Möglichkeiten ansteuern kann:
- entweder über ein "virtuelles Dateisystem", das der Kernel dann auf die GPIO ports mapped
- über direkten "Adresszugriff", was ich mit dem gpio util erwartet habe. Hier ist die Portabilität schlechter, was mich im Moment nicht sonderlich stört.
Meine Erkenntnis ist nun, dass die Ausgabe schnarchlangsam ist. Mit Methode 1 brauche ich für 8 Ausgänge schon ~30ms, mit Methode 2 noch viel länger. Hochgerechnet auf 40 Ausgänge ist das deutlich zu viel, denn ich will dort z.B. Taster einlesen und an den Ausgängen Rollläden positionsgenau ansteuern. Ich peile eine Updaterate von 20-40ms für alle I/Os an, wollte daher für die Ausgabe von 40bit nicht mehr als 5ms verbraten. Wenn ich 2,5 GPIO-Zugriffe pro bit rechne (manchmal DATA ändern, dann CLOCK setzen und wegnehmen), dann komme ich auf ca. 100 bit in 5ms, also max. 50 µs pro GPIO-Zugriff.
Wenn ich jetzt z.B. http://jeelabs.org/2013/06/15/fast-io-on-a-raspberry-pi/ lese, dann wird mir dort suggeriert, dass man im µs-Takt Datenausgeben kann, was meine externe Hardware locker mitmachen würde.
Kann mir jemand einen Tipp geben? Ich habe einige Perl-Erfahrung, c kenne und kann ich prinzipiell auch, aber unter linux hab ich keinen Plan, wie ich eine Funktion unter c schreiben könnte, um sie dann unter Perl aufzurufen (falls das der Weg ist). Vielleicht müsste ich auch nur wiringPi-Perl installiert bekommen. Jeder Hinweis ist willkommen.
Michael
Für das, was Du vorhast, ist fhem der falsche Ansatz, denn fhem ist keine Realtime-Anwendung und Du kannst Dich nicht darauf verlassen, wie schnell der Raspi wirklich reagiert.
Zitat von: betateilchen am 18 Januar 2015, 00:34:07
Für das, was Du vorhast, ist fhem der falsche Ansatz, denn fhem ist keine Realtime-Anwendung und Du kannst Dich nicht darauf verlassen, wie schnell der Raspi wirklich reagiert.
Hallo betateilchen,
zunächst mal danke für die sehr schnelle Antwort mitten in der Nacht. Kannst Du die Antwort bitte noch etwas differenzierter geben? Von was würdest abraten bzw. zu was würdest Du raten:
- Generell sollte es möglich sein, ca. 20 ×2 Taster zu verarbeiten und damit 20 Rollläden zu steuern.
- Um Taster sauber abzufragen, können sie entweder per Interrupt eingelesen werden oder entsprechend oft gepollt werden. Ich würde aus der Erfahrung heraus gerne mit mindestens 25 Hz pollen, wenn Du - oder jemand anderer - eine Lösung mit Interrupts empfehlen kannst, dann bin ich ganz Ohr.
- Ich nehme gerne Empfehlungen an, wie aus Interrupt bzw. Pollen dann Ereignisse im Sinne von Fhem werden.
- Und sehr gespannt bin ich auf einen Vorschlag, wie ich 40 Eingänge und 40 Ausgänge hinbekomme. Ich bestehe nicht unbedingt darauf meine Schieberegister direkt am Fhem anzuschließen, aber ich hab bisher nichts annähernd geeignetes gefunden, um diese Zahl von IOs zu bedienen. Wenn ich eine "Vorstufe" mit einem extra Chip mache, wie übertrage ich dann Deiner Meinung nach die Daten idealerweise nach Fhem.