Interrupt bei einem GPIO Pin des RasPi

Bergmensch
Beiträge: 13
Registriert: Do 6. Mai 2021, 18:16

Interrupt bei einem GPIO Pin des RasPi

Beitrag von Bergmensch »

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! :cry:

Und nebenbei: In Python (darf ich das hier überhaupt erwähnen? :wink: ) 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! :wink:

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Interrupt bei einem GPIO Pin des RasPi

Beitrag von six1 »

Läuft deine Software unter sudo?
Gruß, Michael

Bergmensch
Beiträge: 13
Registriert: Do 6. Mai 2021, 18:16

Re: Interrupt bei einem GPIO Pin des RasPi

Beitrag von Bergmensch »

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. :oops:
Gewissermaßen: "copy-paste, plug and play"-Beispiele...

Timm Thaler
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

Beitrag von Timm Thaler »

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?

mschnell
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

Beitrag von mschnell »

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
Zuletzt geändert von mschnell am Mo 10. Mai 2021, 11:39, insgesamt 1-mal geändert.

aro
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

Beitrag von aro »

Hallo,
GPIOs brauchen schon lange kein sudo mehr.
Wiso denn nicht ? GPIOs sind für mich ein entscheidendes Kriterium, um eine Anwendung überhaupt auf dem Raspi laufen zu lassen!

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.
Erste Frage: Warum Interrupts?
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.

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 !

Timm Thaler
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

Beitrag von Timm Thaler »

aro hat geschrieben:
Fr 7. Mai 2021, 12:56
Wiso denn nicht ? GPIOs sind für mich ein entscheidendes Kriterium, um eine Anwendung überhaupt auf dem Raspi laufen zu lassen!
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.
aro hat geschrieben:
Fr 7. Mai 2021, 12:56
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.
Autsch! Wenn man keine Ahnung hat, sollte man die Kresse halten.

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.

aro
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

Beitrag von aro »

Hallo,

Was hat
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.
den mit dem Thema zu tun ?

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.
Autsch! Wenn man keine Ahnung hat, sollte man die Kresse halten.
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.

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!

Socke
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

Beitrag von Socke »

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.
Bergmensch hat geschrieben:
Do 6. Mai 2021, 20:35
Die Probleme fangen nämlich schon beim Compilieren an!
Zeig doch mal deine Fehlermeldungen her. In Corona-Zeiten ist auch meine Glaskugel nicht ganz in Ordnung.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

aro
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

Beitrag von aro »

Hallo,
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.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Interrupt bei einem GPIO Pin des RasPi

Beitrag von six1 »

Timm Thaler hat geschrieben:
Do 6. Mai 2021, 23:01
GPIOs brauchen schon lange kein sudo mehr.
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

PascalDragon
Beiträge: 823
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

Beitrag von PascalDragon »

six1 hat geschrieben:
Sa 8. Mai 2021, 09:01
Timm Thaler hat geschrieben:
Do 6. Mai 2021, 23:01
GPIOs brauchen schon lange kein sudo mehr.
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
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

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Interrupt bei einem GPIO Pin des RasPi

Beitrag von six1 »

Danke PascalDragon
Gruß, Michael

Timm Thaler
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

Beitrag von Timm Thaler »

aro hat geschrieben:
Fr 7. Mai 2021, 13:46
den mit dem Thema zu tun ?
Verstehendes Lesen? Zusammenhänge erfassen?
aro hat geschrieben:
Fr 7. Mai 2021, 13:46
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.
Jaja. Die letzten Jahrzehnte. Auf dem Raspi. Im Paulanergarten vielleicht.

Timm Thaler
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

Beitrag von Timm Thaler »

PascalDragon hat geschrieben:
Sa 8. Mai 2021, 15:36
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.
Meine Zugriffe laufen auch unter sys/class/gpio.

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.

Antworten