Benachrichtigung bei GPIO-Pin Änderung

Rund um die Hardware des Revolution Pi
Post Reply
Rumpelstilzchen
Posts: 2
Joined: 29 Aug 2024, 09:17

Benachrichtigung bei GPIO-Pin Änderung

Post by Rumpelstilzchen »

Hallo,

das Abfragen eines Eingabe GPIO-Pins am Chip 3 "max31913" funktioniert, z.B. mit diesem Python Skript:

Code: Select all

#!/usr/bin/env python3
import lgpio, time

handle = lgpio.gpiochip_open(3)

if handle < 0:
    print("Fehler beim Öffnen des RP1")
    exit()

led = 1

ret = lgpio.gpio_claim_input(handle, led)
if ret != 0:
    print(f"Fehler beim Allozieren von Pin {led}")
    exit()

while True:
    state = lgpio.gpio_read(handle, led)
    print(f"Pin={state}")
    time.sleep(1)

lgpio.gpio_free(handle, led)
lgpio.gpiochip_close(handle)
Da der Pin nur kurz seinen Zustand ändert, ist eine hohe Polling-Rate erforderlich.

Deshalb soll auf "Benachrichtigung bei Änderung" umgestellt werden, was die lgpio Bibliothek
unter https://abyz.me.uk/lg/index.html unterstützt.

Eine Registrierung auf Änderungen des Pin-Zustandes
schlägt fehl - dazu liefert lgpio das Beispielprogramm monitor.c mit:

./monitor 3:1
chip=3 gpio=1
GPIO in use 3:1 (bad event request)

Der Fehler "bad event request" bedeutet, daß der bei der Registrierung
ausgeführte ioctl-Aufruf fehlschlägt.

Registrierung auf z.B. GPIO Pin 0:4 funktioniert.

Hat jemand eine Idee, wie die Registrierung für den
GPIO-Chip 3 möglich wird?

Rumpelstilzchen

P.S. Hier ein Listing der GPIO-Chips, die Eingabe-PINs sind an Chip 3 - max31913 - angeschlossen.

Code: Select all

$ ls -l /dev/gp*
crw-rw---- 1 root gpio 254, 0 May 13  2023 /dev/gpiochip0
crw-rw---- 1 root gpio 254, 1 May 13  2023 /dev/gpiochip1
crw-rw---- 1 root gpio 254, 2 May 13  2023 /dev/gpiochip2
crw-rw---- 1 root gpio 254, 3 Sep 11 07:22 /dev/gpiochip3
crw-rw---- 1 root gpio 254, 4 Sep 11 07:22 /dev/gpiochip4
lrwxrwxrwx 1 root root      9 Sep 11 07:22 /dev/gpiochip_din -> gpiochip3
lrwxrwxrwx 1 root root      9 Sep 11 07:22 /dev/gpiochip_dout -> gpiochip4


$ sudo cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
 gpio-0   (GPIO0               )
 gpio-1   (GPIO1               )
 gpio-2   (GPIO2               )
 gpio-3   (GPIO3               )
 gpio-4   (GPIO4               )
 gpio-5   (GPIO5               )
 gpio-6   (GPIO6               |mux                 ) out lo 
 gpio-7   (GPIO7               |spi0 CS1            ) out hi ACTIVE LOW
 gpio-8   (GPIO8               |spi0 CS0            ) out hi ACTIVE LOW
 gpio-9   (GPIO9               )
 gpio-10  (GPIO10              )
 gpio-11  (GPIO11              )
 gpio-12  (GPIO12              |mux                 ) out lo 
 gpio-13  (GPIO13              |mux                 ) out lo 
 gpio-14  (GPIO14              )
 gpio-15  (GPIO15              )
 gpio-16  (GPIO16              |mux                 ) out lo 
 gpio-17  (GPIO17              |spi0 CS2            ) out hi ACTIVE LOW
 gpio-18  (GPIO18              )
 gpio-19  (GPIO19              |maxim,db0           ) out lo 
 gpio-20  (GPIO20              |maxim,db1           ) out lo 
 gpio-21  (GPIO21              )
 gpio-22  (GPIO22              )
 gpio-23  (GPIO23              )
 gpio-24  (GPIO24              )
 gpio-25  (GPIO25              )
 gpio-26  (GPIO26              |maxim,modesel       ) out lo 
 gpio-27  (GPIO27              )
 gpio-28  (GPIO28              |maxim,fault         ) in  lo ACTIVE LOW
 gpio-29  (GPIO29              )
 gpio-30  (GPIO30              )
 gpio-31  (GPIO31              )
 gpio-32  (GPIO32              )
 gpio-33  (GPIO33              )
 gpio-34  (GPIO34              )
 gpio-35  (GPIO35              )
 gpio-36  (GPIO36              |spi2 CS3            ) out hi ACTIVE LOW
 gpio-37  (GPIO37              )
 gpio-38  (GPIO38              )
 gpio-39  (GPIO39              )
 gpio-40  (GPIO40              )
 gpio-41  (GPIO41              )
 gpio-42  (GPIO42              )
 gpio-43  (GPIO43              |spi2 CS0            ) out hi ACTIVE LOW
 gpio-44  (GPIO44              |spi2 CS1            ) out hi ACTIVE LOW
 gpio-45  (GPIO45              |spi2 CS2            ) out hi ACTIVE LOW
 gpio-46  (SMPS_SCL            )
 gpio-47  (SMPS_SDA            )
 gpio-48  (SD_CLK_R            )
 gpio-49  (SD_CMD_R            )
 gpio-50  (SD_DATA0_R          )
 gpio-51  (SD_DATA1_R          )
 gpio-52  (SD_DATA2_R          )
 gpio-53  (SD_DATA3_R          )

gpiochip1: GPIOs 100-101, brcmvirt-gpio, can sleep:
 gpio-100 (                    |ACT                 ) out lo 

gpiochip4: GPIOs 488-495, parent: spi/spi2.2, 74hc595, can sleep:

gpiochip3: GPIOs 496-503, parent: spi/spi2.3, max31913, can sleep:

gpiochip2: GPIOs 504-511, parent: platform/soc:firmware:expgpio, raspberrypi-exp-gpio, can sleep:
 gpio-504 (HDMI_HPD_N          )
 gpio-505 (EMMC_EN_N           )
 gpio-506 (NC                  )
 gpio-507 (NC                  )
 gpio-508 (NC                  )
 gpio-509 (NC                  )
 gpio-510 (NC                  )
 gpio-511 (NC                  )
User avatar
dirk
KUNBUS
Posts: 2085
Joined: 15 Dec 2016, 13:19

Re: Benachrichtigung bei GPIO-Pin Änderung

Post by dirk »

Hi Rumpelstilzchen, wenn du ein RevPi DIO Modul benutzt, dann sind dort ja die betreffenden MAX31913 verbaut. Das kann man in den Schaltplänen sehen, die sich hier befinden:
https://revolutionpi.com/en/tutorials/d ... haltplaene

Aber ich wüsste jetzt nicht, wie du diese per GPIOs ansteuern kannst. Was benutzt du denn für Hardware?
Post Reply