Interrupts mit Zeitmessung

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo :)

    Ich habe folgendes (vllt. einfach zu lösendes Problem, aber ich steh irgendwie auf dem Schlauch).

    Ich würde gerne die Zeit Zwischen zwei einkommenden Impulsen an einem GPIO messen. Dafür hatte ich gedacht, dass ich Interrupts verwenden können. Wie ich die Interruptroutine auslöse ist mir klar, nur würde ich auch gerne die Zeit zwischen den zwei Interrupts messen und das ganze ziemlich genau, also im us bis ms Bereich. Habt ihr irgend eine Idee wie ich das effizient umsetzten könnte?

    Würde mich über Antworten freuen :)

  • Hallo Pi94,

    da Du keinen Code gepostest hast, kann ich Dir das nur allgemein beschreiben.

    1. Hinter dem ersten Interrupt kommt eine Zuweisung der Systemzeit an eine Variable
    2. Hinter dem zweiten Interrupt kommt eine Zuweisung der Systemzeit an eine andere Variable
    3. Die zwischen den beiden Interrupts vergangene Zeit ist dann die Differenz zwichen den beiden Variablen

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. Mai 2015 um 15:11)

  • [code=php]
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #
    # Taster mit Mehreren Funktionen
    #
    # v0.1 by meigrafd
    #
    import sys
    from time import sleep, time
    import RPi.GPIO as GPIO
    import signal

    #GPIO pins
    Taster = 11

    # to use RaspberryPi gpio# (BCM) or pin# (BOARD)
    GPIO.setmode(GPIO.BCM)
    #GPIO.setmode(GPIO.BOARD)

    # only one of following:
    PULL = GPIO.PUD_DOWN #GPIO -> GND
    #PULL = GPIO.PUD_UP #GPIO -> 3V3

    # set up GPIO input channels
    GPIO.setup(Taster, GPIO.IN, pull_up_down = PULL)

    #------------------------------------------------------------------------

    globalVar = {}

    def interrupt_event(pin):
    # only for debug:
    if GPIO.input(pin) == GPIO.HIGH:
    print "rising edge on %s" % pin
    elif GPIO.input(pin) == GPIO.LOW:
    print "falling edge on %s" % pin

    if pin == Taster:
    if GPIO.input(Taster) == GPIO.HIGH:
    if globalVar['timeTrigger']:
    print "time past: {0:10}".format( (time() - globalVar['timeTrigger']) )
    globalVar['timeTrigger'] = time()
    #globalVar['timeTrigger'] = None
    else:
    globalVar['timeTrigger'] = time()
    else:
    print "ERROR! Unknown GPIO pin triggered: %s" % pin

    #------------------------------------------------------------------------

    try:
    GPIO.add_event_detect(Taster, GPIO.BOTH, callback=interrupt_event, bouncetime=100)
    globalVar['timeTrigger'] = None

    #keep script running
    signal.pause()
    except (KeyboardInterrupt, SystemExit):
    GPIO.cleanup()
    print "\nQuit\n"
    [/php]

  • Danke für die Antworte,

    wollte gerne in C programmieren also werde ich die ersten zwei Lösungen mal kombinieren, mal schauen ob's funktioniert, danke für die Hilfe :bravo2:

    Wie genau sind die timpestamps der pigpio Klasse denn?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!