Interrupt bei einem GPIO Pin des RasPi
-
- Beiträge: 13
- Registriert: Do 6. Mai 2021, 18:16
Interrupt bei einem GPIO Pin des RasPi
Geschätzte Wissende in diesem Forum,
ich bin verzweifelt, bitte um eure Hilfe!
Suche im Netz (natürlich auch in diesem Forum) seit Stunden nach Beispielen in Pascal, mit welchen ich Signalflanken an GPIO Pins des RasPi mittels Interrupts abfragen kann.
Leider habe ich bisher nichts Passendes gefunden.
Bin immer wieder auf "pascalIO" gestoßen, aber keines der Beispiele mit pascalIO will bei mir laufen!
Und nebenbei: In Python (darf ich das hier überhaupt erwähnen? ) gibt`s ja recht einfache Befehle, um Interrupts an GPIO Pins des RasPi zu verarbeiten...
Nur möchte ich so etwas eben in Pascal und mittels Lazarus machen....
Bitte um lauffähige Beispiele - wenn geht nicht objektorientiert!
ich bin verzweifelt, bitte um eure Hilfe!
Suche im Netz (natürlich auch in diesem Forum) seit Stunden nach Beispielen in Pascal, mit welchen ich Signalflanken an GPIO Pins des RasPi mittels Interrupts abfragen kann.
Leider habe ich bisher nichts Passendes gefunden.
Bin immer wieder auf "pascalIO" gestoßen, aber keines der Beispiele mit pascalIO will bei mir laufen!
Und nebenbei: In Python (darf ich das hier überhaupt erwähnen? ) gibt`s ja recht einfache Befehle, um Interrupts an GPIO Pins des RasPi zu verarbeiten...
Nur möchte ich so etwas eben in Pascal und mittels Lazarus machen....
Bitte um lauffähige Beispiele - wenn geht nicht objektorientiert!
-
- Beiträge: 13
- Registriert: Do 6. Mai 2021, 18:16
Re: Interrupt bei einem GPIO Pin des RasPi
Hi,
danke für die rasche Antwort.
Nö, leider nicht...
Die Probleme fangen nämlich schon beim Compilieren an!
Ich bin leider kein Profi und suche deshalb komplett funktionsfähige Beispielprogramme für Dummies.
Gewissermaßen: "copy-paste, plug and play"-Beispiele...
danke für die rasche Antwort.
Nö, leider nicht...
Die Probleme fangen nämlich schon beim Compilieren an!
Ich bin leider kein Profi und suche deshalb komplett funktionsfähige Beispielprogramme für Dummies.
Gewissermaßen: "copy-paste, plug and play"-Beispiele...
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Interrupt bei einem GPIO Pin des RasPi
GPIOs brauchen schon lange kein sudo mehr.
Erste Frage: Warum Interrupts?
Sind die Impulse so kurz, dass sie durch normales Pollen nicht erkannt werden? Interrupt über WiringPi oder PXL https://wiki.freepascal.org/Lazarus_on_ ... are_access
Sind die Impulse lang genug (>10msec), Du musst aber schnell drauf reagieren?
Normales Polling über FileIO.
Das Problem ist halt prinzipiell, dass der Pi mit Raspbian kein Echtzeit-OS hat. Es kann also IMMER mehrere bis mehrere 100msec dauern, bis Dein Programm auf einen Pegelwechsel reagieren kann.
Also erstmal gucken: Welche Pulse und brauche ich einen Interrupt?
Erste Frage: Warum Interrupts?
Sind die Impulse so kurz, dass sie durch normales Pollen nicht erkannt werden? Interrupt über WiringPi oder PXL https://wiki.freepascal.org/Lazarus_on_ ... are_access
Sind die Impulse lang genug (>10msec), Du musst aber schnell drauf reagieren?
Normales Polling über FileIO.
Das Problem ist halt prinzipiell, dass der Pi mit Raspbian kein Echtzeit-OS hat. Es kann also IMMER mehrere bis mehrere 100msec dauern, bis Dein Programm auf einen Pegelwechsel reagieren kann.
Also erstmal gucken: Welche Pulse und brauche ich einen Interrupt?
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Interrupt bei einem GPIO Pin des RasPi
Hardware-Interrupts in Linux in Lazarus geht nicht (soweit ich weiß).
In Linux sind für Interrupts Device Driver zuständig, die die User-Software dann über Device-Files anspricht (z.B,. in Blocking Read auf einen Interrupt warten).
Ich vermute es gibt für RasPi Device-Driver für GPIO-Interrupts (falls die Hardware das kann).
-Michael
In Linux sind für Interrupts Device Driver zuständig, die die User-Software dann über Device-Files anspricht (z.B,. in Blocking Read auf einen Interrupt warten).
Ich vermute es gibt für RasPi Device-Driver für GPIO-Interrupts (falls die Hardware das kann).
-Michael
Zuletzt geändert von mschnell am Mo 10. Mai 2021, 11:39, insgesamt 1-mal geändert.
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Interrupt bei einem GPIO Pin des RasPi
Hallo,
Gerade die Kombination, über einen Bildschirm mit dem User zu kommunizieren und über die GPIO Daten oder Zustände abzufragen und gezielt Schaltvorgänge auszulösen bringes es doch erst.
Mit pascalIO habe ich keine Erfahrung. Ein kurzer Blick in den Quelltext hat mich nicht überzeugt.
Ich würde WIRINGPI empfehlen. Da gibt es sehr viele und gute Anleitungen, wie man es installiert und nutzt. Außerdem gibt es eine Unit die, die Objektdatei für Lazarus nutzbar macht.
Wenn Du nichts passendes findest kannst Du dich noch mal melden.
Man lernt nur wenn man selbst etwas tut !
Wiso denn nicht ? GPIOs sind für mich ein entscheidendes Kriterium, um eine Anwendung überhaupt auf dem Raspi laufen zu lassen!GPIOs brauchen schon lange kein sudo mehr.
Gerade die Kombination, über einen Bildschirm mit dem User zu kommunizieren und über die GPIO Daten oder Zustände abzufragen und gezielt Schaltvorgänge auszulösen bringes es doch erst.
Weil Interrupts die beste Möglichkeit bieten, Ereignisse abzufangen und dabei das System minimal zu belasten. Wer davon keine Ahnung hat wird das natürlich nicht zugeben und behaupten, das Polling die bessere Lösung ist. Kunststück, wenn wenn nichts anderes kann.Erste Frage: Warum Interrupts?
Mit pascalIO habe ich keine Erfahrung. Ein kurzer Blick in den Quelltext hat mich nicht überzeugt.
Ich würde WIRINGPI empfehlen. Da gibt es sehr viele und gute Anleitungen, wie man es installiert und nutzt. Außerdem gibt es eine Unit die, die Objektdatei für Lazarus nutzbar macht.
Wenn Du nichts passendes findest kannst Du dich noch mal melden.
Man lernt nur wenn man selbst etwas tut !
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Interrupt bei einem GPIO Pin des RasPi
Häh? sudo heißt, dass man um GPIOs abzufragen das Programm als Superuser - sudo - laufen lassen muss, als normaler User konnte man die GPIOs nicht ansprechen.
Das war am Anfang so, wurde aber schnell abgestellt.
Deswegen muss schon seit 3 Jahren kein Programm mehr als sudo laufen, wenn es GPIOs bedienen will. So man ein einigermaßen aktuelles Raspbian hat.
Autsch! Wenn man keine Ahnung hat, sollte man die Kresse halten.aro hat geschrieben: ↑Fr 7. Mai 2021, 12:56Weil Interrupts die beste Möglichkeit bieten, Ereignisse abzufangen und dabei das System minimal zu belasten. Wer davon keine Ahnung hat wird das natürlich nicht zugeben und behaupten, das Polling die bessere Lösung ist. Kunststück, wenn wenn nichts anderes kann.
Ich polle hier die GPIOs für eine Haussteuerung alle 10msec - und die Auslastung für dieses Programm dümpelt bei 0-1%.
Was passiert, wenn Du eine Störung auf dem Pin hast und Dein Interrupt ständig feuert? Z.B durch Einstreuung aus einem Schaltnetzteil. Dann kann Dir Dein Programm ganz schnell die CPU zu 25% zulöten. Und der Treiber für die GPIOs nochmal zu 25%.
Mit Interrupts sollte man sehr vorsichtig umgehen und sie nur einsetzen, wenn es wirklich nötig ist. Sprich wenn die Pulse so kurz sind, dass sie durch Polling nicht erfasst werden können.
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Interrupt bei einem GPIO Pin des RasPi
Hallo,
Was hat
Erstens ist kein Sicherheitsproblem ein einzelnes Programm als Superuser laufen zu lassen und zweitens schreibst Du selbst, das dieses Problem sei 3 Jahren nicht mehr existiert.
Das man für neue Entwicklungen kein mehrere altes Betriebssystem verwendet sollte sich inzwischen rumgesprochen haben.
Sicher sind Interrupts und Störsignale an den Eingängen ein Problem. Das ist aber noch lange kein Grund Interrupts schlecht zu reden, nur weil Du keine Ahnung hast, wie man die Eingänge richtig beschaltet und ansteuert!
Was hat
den mit dem Thema zu tun ?Häh? sudo heißt, dass man um GPIOs abzufragen das Programm als Superuser - sudo - laufen lassen muss, als normaler User konnte man die GPIOs nicht ansprechen.
Das war am Anfang so, wurde aber schnell abgestellt.
Deswegen muss schon seit 3 Jahren kein Programm mehr als sudo laufen, wenn es GPIOs bedienen will. So man ein einigermaßen aktuelles Raspbian hat.
Erstens ist kein Sicherheitsproblem ein einzelnes Programm als Superuser laufen zu lassen und zweitens schreibst Du selbst, das dieses Problem sei 3 Jahren nicht mehr existiert.
Das man für neue Entwicklungen kein mehrere altes Betriebssystem verwendet sollte sich inzwischen rumgesprochen haben.
Damit solltest Du ganz vorsichtig sein! ich habe die letzten Jahrzehnte meines Berufslebens als Hard- und Softwareentwickler gearbeitet und professionelle Projekte auf dem Raspi umgesetzt.Autsch! Wenn man keine Ahnung hat, sollte man die Kresse halten.
Sicher sind Interrupts und Störsignale an den Eingängen ein Problem. Das ist aber noch lange kein Grund Interrupts schlecht zu reden, nur weil Du keine Ahnung hast, wie man die Eingänge richtig beschaltet und ansteuert!
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Interrupt bei einem GPIO Pin des RasPi
Falls es euch nichts ausmacht, würde ich in der Diskussion dann nochmal auf PascalIO zurückkommen.
Dort gibt es durchaus Interruptunterstützung für den sysfs-Treiber. Das sollte grundlegend funktionieren, auch über sysfs-Interrupts natürlich keine Pferde zu stehlen sind (oder so ähnlich). Da die sysfs-Schnittstelle blockierend genutzt wird, muss für jeden Input ein eigener Thread erzeugt werden.
Ein grundlegendes Beispiel ist im Github Repository zu finden.
Dort gibt es durchaus Interruptunterstützung für den sysfs-Treiber. Das sollte grundlegend funktionieren, auch über sysfs-Interrupts natürlich keine Pferde zu stehlen sind (oder so ähnlich). Da die sysfs-Schnittstelle blockierend genutzt wird, muss für jeden Input ein eigener Thread erzeugt werden.
Ein grundlegendes Beispiel ist im Github Repository zu finden.
Zeig doch mal deine Fehlermeldungen her. In Corona-Zeiten ist auch meine Glaskugel nicht ganz in Ordnung.Bergmensch hat geschrieben: ↑Do 6. Mai 2021, 20:35Die Probleme fangen nämlich schon beim Compilieren an!
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Interrupt bei einem GPIO Pin des RasPi
Hallo,
Und das ist genau der Grund warum auf das andere Pferd gesetzt habe.
Da die sysfs-Schnittstelle blockierend genutzt wird, muss für jeden Input ein eigener Thread erzeugt werden.
Und das ist genau der Grund warum auf das andere Pferd gesetzt habe.
Re: Interrupt bei einem GPIO Pin des RasPi
Ist mir da etwas entgangen?
Ich habe vor 3 Monaten mit einem 4b und aktuellem Image mit rpi_hal.pas ein Projekt durchgezogen und muss die Software unter sudo starten für den Zugriff auf die GPIO
Gruß, Michael
-
- Beiträge: 830
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Interrupt bei einem GPIO Pin des RasPi
Die rpi_hal.pas nutzt noch immer die alte /dev/class/gpio-basierte Schnittstelle, bei der die Berechtigungen nicht angepasst werden können. Die neue, empfohlene Schnittstelle ist über /dev/gpiochip, welche mit Dateideskriptoren arbeitet und wofür Berechtigungen vergeben werden können, wodurch die Verwendung von sudo unnötig ist, solange der Nutzer in der passenden Gruppe ist.
FPC Compiler Entwickler
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Interrupt bei einem GPIO Pin des RasPi
Verstehendes Lesen? Zusammenhänge erfassen?
Jaja. Die letzten Jahrzehnte. Auf dem Raspi. Im Paulanergarten vielleicht.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Interrupt bei einem GPIO Pin des RasPi
Meine Zugriffe laufen auch unter sys/class/gpio.PascalDragon hat geschrieben: ↑Sa 8. Mai 2021, 15:36Die rpi_hal.pas nutzt noch immer die alte /dev/class/gpio-basierte Schnittstelle, bei der die Berechtigungen nicht angepasst werden können. Die neue, empfohlene Schnittstelle ist über /dev/gpiochip, welche mit Dateideskriptoren arbeitet und wofür Berechtigungen vergeben werden können, wodurch die Verwendung von sudo unnötig ist, solange der Nutzer in der passenden Gruppe ist.
Der Witz ist, dass man dafür in der Gruppe gpio sein muß. Und das ist jeder User seit einiger Zeit automatisch, wenn nix anderes angegeben.