Forum: Mikrocontroller und Digitale Elektronik (Raspberry Pi) Interrupt funktioniert nicht bei hohen Frequenzen


von M. S. (ekkie)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte ein PWM Signal mit einer Interrupt-routine am Raserry Pi 
mittels python auslesen.
Bei dem einfach Versuch einen Taster an Pin 10 auszulesen funktioniert 
das Programm:

high
low
high
low
high
low

Schließe ich den Ausgang des NE555 (siehe Anhang [R_a=150; R_b=150; C=1u 
-> f=2.5kHz; duty_cycle=50%) an Pin 10 an, bekomme ich folgendes:

low
high
high
high
low
high
low
low

Nach meiner Logik müsste er aber die gleichen Signale ausgeben wie beim 
Taster, nur halt viel schneller.

der Python-Code:
1
import RPi.GPIO as GPIO
2
from pynput.keyboard import Controller
3
4
keyboard = Controller()  # Create the controller
5
signal_pin = 10
6
7
def button_callback(channel):
8
    if GPIO.input(signal_pin):
9
        #keyboard.type("1")
10
        print("high")
11
    else:
12
        #keyboard.type("0")
13
        print("low")
14
15
GPIO.setwarnings(False)  #ignore warnings
16
GPIO.setmode(GPIO.BOARD) #use physical pin-numbering
17
GPIO.setup(signal_pin, GPIO.IN, pull_up_down = GPIO.PUD_DOWN) # set pin 10 to input and and pull down initial value
18
19
GPIO.add_event_detect(signal_pin,GPIO.BOTH,callback=button_callback) # setup event on pin 10 when change
20
21
message = input("Press enter to quit\n\n") # run until someone presses enter
22
GPIO.cleanup() #Cleaning up

Ziel ist es später, die Ausgangs-Signale einer Tastatur mit 
ps/2-Anschluss an den GPIO-Pins des Rasperry pi's auszulesen. Dort sind 
um die 12.5kHz auzulesen.

Was mache ich falsch?

von M. S. (ekkie)


Angehängte Dateien:

Lesenswert?

Quelle des ersten Anhangs: 
https://www.electronics-tutorials.ws/waveforms/555-circuits-part-1.html

ich korrigiere meine Angabe zum duty_cycle: 36,6% (siehe zweiten Anhang: 
Bild)

von georg (Gast)


Lesenswert?

M. S. schrieb:
> Nach meiner Logik müsste er aber die gleichen Signale ausgeben wie beim
> Taster, nur halt viel schneller.

So schnell kann er halt nicht - der RasPi ist ein Linux-Computer, kein 
Mikrokontroller.

Du kannst ja die Frequenz langsam steigern von z.B. 5 Hz an, du wirst 
dich wundern wie schnell der RasPi schlapp macht. Für solche Zwecke ist 
er einfach ungeeignet.

Georg

von g457 (Gast)


Lesenswert?

> [..] Interrupt-routine am Raserry Pi mittels python auslesen [..]

Naja..

> [..] f=2.5kHz [..]

mach das mal 4 bis 5 Größenordnungen(!) langsamer..

> Nach meiner Logik müsste er aber die gleichen Signale ausgeben wie beim
> Taster, nur halt viel schneller.

Nach meiner nicht.

HTH

von 2⁵ (Gast)


Lesenswert?

Bei einem Standard-Kernel kann ein GPIO Interrupt bis zu 75 µs dauern,
das wären grob so 13 kHz. Jetzt verwendest du Python, und das dürfte 
locker nochmal den Faktor 10 - 100 (Interpreter) drauf packen. Du 
könntest C nehmen
und ggfs. auch den Kernel mit niedriger Latenz neu kompilieren.

Hier wird es gezeigt, was du tun könntest:

https://sites.google.com/site/hamlinhomeprojects/projects/raspberry-pi-isr

von Martin (Gast)


Lesenswert?

> Ziel ist es später, die Ausgangs-Signale einer Tastatur mit
> ps/2-Anschluss an den GPIO-Pins des Rasperry pi's auszulesen. Dort sind
> um die 12.5kHz auzulesen.

Für solche Aufgaben setze ich einen Controller (z. B. ATTiny) ein und 
sende die Daten über eine geeignete Schnittstelle (RS22, SPI, I2C, etc.) 
an den Raspberry Pi.

von 2⁵ (Gast)


Lesenswert?

Unabhängig davon, dass Martin mit dem seperatem Controller recht hat: 
Dein Hauptproblem dürfte dein 'print "high"' bzw. 'print "low"' sein.
Das kostet richtig Zeit! Gebe doch mal die aktuelle Zeit mit aus, also
print (time.time())

Du könntest statt "high" und "low" auszugeben jeweils in ein Array einen 
Zeitstempel schreiben, und nach 100 Interrupts den Array ausgeben.
Dann siehst du, in welchen Abständen der RPi in Kompination mit Python 
einen Interrupt schafft. Wobei auch hier die dynamische 
Speicherverwaltung von Python Zeit braucht. Besser wäre, das ganze in C 
in ein statisches Array zu speichern, würde sicher deutlich schneller 
gehen.

von M. S. (ekkie)


Lesenswert?

vielen lieben Dank für die hilfreichen Antworten !

ich denke es lohnt sich doch eher eine USB-Tastatur sich anzulegen. 
Dachte ich könnte ein paar Mäuse sparen. aber das ist der Aufwand leider 
nicht Wert.

Trotzdem habe ich wieder mal dazu gelernt. Dankeschön!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.