Pralleffekt bei ISR (Interrupt-Routine) oder ...

  • ... falsches Api Interpretation?

    Hallo,
    bevor ich mit meinen Projekt "so richtig loslege", wollte noch etwas ausprobieren.
    Nun verstehe da was nicht;

    Mein Taster-3 (am GPIO 22 angeschlossen) ist mit einem Physikalischem 10kOhm Pulldown Widerstand und, um den Prallefekt zu unterdrücken mit einem 22nF Kondensatoren (habe nachträglich! bei den Tests gemacht) versehen. (Um die 20nF hat bei der TTL Technik 1A funktioniert.)

    Wen ich also den Taster-3 (am GPIO 22) betätige wird in der Konsole SOWAS:

    From callback one =
    ('From callback two = ', 2577)
    From callback one =
    ('From callback two = ', 2960)

    ausgegeben.

    Die Funktionen werden quasi doppelt ausgeführt - und was machen die Klammern in der Ausgabe?
    Habe eigentlich SOWAS:

    From callback one =
    From callback two = 2960

    erwartet.

    Bitte um kleine Erläutung. Verstehe nicht, warum es doppelt ausgeführt wird, bzw. was machen die Klammern .... in der Ausgabe?

    LG
    Georg

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:

  • Hallo Georg,

    na ja, die Klammern werden ausgegeben, weil Du das im Print-Befehl so angegeben hast...

    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.

  • Hmmm,
    eigentlich wollte nur noch meinen Scotch zu genießen und "schlafi" gehen.

    Andreas
    Nun solch Sätze:
    weil Du das im Print-Befehl so angegeben hast...
    habe selber gerne .... benutzt ... wie ?gerecht ist die Welt! - hihihihi
    OK - wie ich es "Maskieren" soll, versuche es selber hinzubekommen, aber was ist mit der doppelten Anzeige?

    @mmi
    daran (Du mußt softwaremässig entprellen) habe ich nicht nur gelesen, abe mir AUCH! Gedanken gemacht.
    Ist -> sind die GPIO Ports wirklich SOOOOOO empfindlich?

    LG
    Georg

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:


  • Ist -> sind die GPIO Ports wirklich SOOOOOO empfindlich?


    "Schläfrig" sind die bestimmt nicht - selbst bei einem nur mit 1 MHz getaktetem Atmel uC kenne ich das.
    Bin mir eigentlich sehr sicher, daß das die Ursache für Dein Problem ist. Ich entprelle deshalb schon immer nur softwaremässig zu meiner vollsten Zufriedenheit. ;)

  • Hallo.


    Bin mir eigentlich sehr sicher, daß das die Ursache für Dein Problem ist. Ich entprelle deshalb schon immer nur softwaremässig zu meiner vollsten Zufriedenheit. ;)


    Will mich einmischen aber da gebe ich mmi vollkommen recht.
    Setzt mal dein "bouncetime" auf ~250- 300 und ich denke du wirst Ruhe haben .

    gruß root

    Einmal editiert, zuletzt von root (6. April 2015 um 03:01)

  • Danke für Deine Antwort root.
    Nun :
    ....
    # < Taster-3 >
    GPIO.add_event_detect(22, GPIO.RISING, bouncetime=100) # Event REGISTRIEREN ? oder auch ausführen ?
    # GPIO.add_event_detect(22, GPIO.RISING, bouncetime=850)

    ....
    Habe schon sogar mit 850 probiert.

    LG
    Georg

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:


  • Die Funktionen werden quasi doppelt ausgeführt - und was machen die Klammern in der Ausgabe?

    Python2 ist in manchen Dingen anders als Python3. Du verwendest für 'print' eine Schreibweise von python3 die aber in python2 eine andere Auswirkung hat. Da dein Script für python2 geschrieben und auch damit ausgeführt ist, bewirkt ' print("bla") ' das es vor der Ausgabe zu einer tuples wird sobald mehrere "stellen" dazu kommen.

    Du hast 3 Möglichkeiten das zu korregieren:

    • Du importierst die print aus __future__ sodass es kein Statement sondern eine Funktion wird und die Klammern eine Daseinsberechtigung haben, wie in python3:

      Python
      from __future__ import print_function

      Am Restlichen Code brauchst du dann nichts mehr ändern.

    • Du änderst alle 'print's in deinem Code ab und nimmst die Klammern weg, zum Beispiel:
      Code
      print("From callback one = ")

      in:

      Code
      print "From callback one = "
    • Du schreibst deinen Code vollständig für python3 und führst ihn dann auch damit aus..


    Zur Entprellung:
    Eine Bouncetime von 100 ist meistens zu wenig. 100 steht für 100ms. Bei den meisten Vorhaben bemerkt man erst eine bouncetime von 150 oder 200.
    Gehe also mal kleine Schritte und nicht von 100 auf 800.

    Ich weiß auch nicht wie du auf einen Kondensator von nur 22nF kommst :s Für den PI sollten es 100nF sein.
    > hier < sind allgemein auch weitere Möglichkeiten beschrieben

  • Hallo,
    vielen Dank Euch allen. In besonderem Dir meigrafd für die ausführliche Details.
    Was den 22nF Kondensator betrifft, habe so in Erinnerung, hat aber mmi sein LINK
    nur bestätigt. Sehe bitte Teil ->Wechselschalter ohne Flip-Flop.
    Was:

    Code
    # > Taster3 <
    GPIO.add_event_detect(22, GPIO.RISING, bouncetime=100) # Event REGISTRIEREN ? oder auch ausführen ?
    GPIO.add_event_callback(my_channel, my_callback_one)
    GPIO.add_event_callback(my_channel, my_callback_two)


    betrifft, habe mir etwas leichter gemacht, und meine Aufgaben in eine andere Funktion (> funktion_three(callback)< ) versetzt.

    Code
    GPIO.add_event_detect(22, GPIO.RISING, callback=funktion_three, bouncetime=100)


    Jetzt funktioniert erstmall alles wie gewollt.

    Warum das Teil des Codes > Taster3 < doppelt ausgeführt wird, werde vielleicht andermal - bei etwas mehr Zeit testen.

    LG
    Georg
    :danke_ATDE:

    Sollte ich "Müll- reden" :blush: - bitte mich (?) "auf die Nuss" hauen. :huh:

Jetzt mitmachen!

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