Nur eine Flanke wird erkannt

  • Hast du es auch schon mit einer Hardwareseitigen Entprellung probiert? Schließ dazu einfach einen 100nF Kondensator zwischen die beiden Kontakte des Tasters, am besten direkt am Taster also möglichst nah am Taster. Siehe dazu auch http://www.forum-raspberrypi.d…llen?pid=172927#pid172927

  • Ich glaube mittlerweile, der 10k-Ohm Widerstand nach Masse ist zu wenig, vllt. wird über den die Spannung zu schnell abgebaut und der Pi merkt das nicht schnell genug.
    Ich löte heute Abend mal ein Poti dazwischen und teste dann nochmal.
    Die Leute hier denken eh schon ich bin bekloppt, weil ich dauernd die Türe auf und zu mache. :lol:

  • Schon wieder zu langsam...


    Zu Meigrafd's Beitrag:
    jep, irgendwo in dieser Richtung muss doch das Problem liegen!

    Quote

    Beim Script für steigende und fallende Flanke wird beim öffnen 2x LOW erkannt und beim schliessen 1x LOW.


    2x low kann doch nicht gehen, ohne dass ein high dazwischen war. meigrafd's Kondensator müsste jetzt den Flankenwechsel verlangsamen und das high, das anscheinend verloren geht (genau in der bouncetime?) erfassen.

    Edited once, last by rasray ().

  • Probiere ich heute Abend auch noch aus, muss jetzt leider los. Danke schonmal für eure Zeit, Hilfe und die Tips. :danke_ATDE:
    Soll ich einen bipolaren oder einen unipolaren Kondensator nehmen ?
    Oder beide, einen bipolaren gegen den Störfunk, einen unipolaren für das Signal ?

  • Hallo rasray,



    jep, irgendwo in dieser Richtung muss doch das Problem liegen!


    2x low kann doch nicht gehen, ohne dass ein high dazwischen war. meigraf's Kondensator müsste jetzt den Flankenwechsel verlangsamen und das high, das anscheinend verloren geht (genau in der bouncetime?) erfassen.


    doch!


    HIGH-Pegel bedeutet > 1,3 V
    LOW-Pegel bedeutet < 0,8 V.


    Der Bereich zwischen 0,8 V und 1,3 V löst weder HIGH noch LOW aus.


    Ein Wechsel von z.V 1 V auf 2 V löst einen HIGH-Pegel aus. Ein Wechsel zurück auf 1 V löst keinen Pegelwechsel auf LOW aus. Geht's dann wieder auf 1,5 V, dann wird dies erneut an einem HIGH-Pegelwechsel erkannt.


    Allein dies sagt mir, dass die Pegel nicht sauber auf HIGH oder LOW gezogen werden und Fremdisgnale Ursache des Problems sind.


    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

  • Hui, dass es da eine "Grauzone" gibt, ist mir noch nie aufgefallen, Ich dachte bis jetzt, es gäbe eine "Schwellspannung"!
    ... Und der GPIO-Level würde statisch in diesem Bereich trotzdem ein High liefern?


    ...Und sollte der Pull-Down-Widerstand nicht genau den sauberen Zustand sicherstellen?


    ...Und was bewirken eventuell der zusätzliche interne Pull-Down-Widerstand und der 4,7-kOhm-Widerstand???

    Edited once, last by rasray ().

  • Hallo rasray,



    Hui, dass es da eine "Grauzone" gibt, ist mir noch nie aufgefallen, Ich dachte bis jetzt, es gäbe eine "Schwellspannung"!
    ... Und der GPIO-Level würde statisch in diesem Bereich trotzdem ein High liefern?


    offensichtlich nicht...


    Vor rund zwei Jahen hatte ich mal mit einem Kondensator, einem Widerstand und einem AD-Wandler experimentiert. Ursprüpnglich wollte ich die Lade-Kurve / Entladekurve aufnehmen.


    Entladen wurde, bis ein Pegelwechsel auf LOW erkannt wurde, dann sofort wieder aufgeladen.
    Aufgeladen wurde, bis ein Pegelwechsel auf HIGH erkannt wurde, dann sofort wieder entladen.
    Ursprünglich war das als Test für meine GPIO-Library gedacht, um auch Funktionen zum Auslesen von ADC einzubauen.



    Hm, jetzt kannst Du Dir vorstellen, wenn LOW heißt: <0,8 V und HIGH > 1,3 V, dass die Kurve nur zwischen Spannungen von 0,8 bis 1,3 V Messwerte aufweist.


    Erst wunderte ich mich - dann erinnerte ich mich.


    Konsequenterweise habe ich dann nicht HIGH- und LOW-Pegelwechsel als Umschalter für Entladen und Aufladen genutzt, sondern habe stattdessen die Spannung direkt ausgelesen. Denn das konnte das Programm ja bereits.


    Mit der Spannung habe ich mich dann an 0 V und 3,3 V herangetastet.


    Und kaum macht man's richtig, sah die Kurve auch schon schulbuchmäßig aus.


    Beste Grüße


    Andreas

    Images

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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

    Edited once, last by Andreas ().

  • Ich meinte oben nicht, dass du die bouncetime erhöhen sollst, sondern, dass du vor dem auslesen ein wenig warten sollst. Wenn der Status bei geschlossener und offener Tür ja richtig erkannt wird, dann wird das Problem beim Wechsel sein. Also wartest du nach dem Wechsel einfach ein bisschen, bevor du den Status abfragst... Dann sollte er ja stabil sein.


    Code
    def interrupt_event(pin):
        time.sleep(1)
        zeit = time.strftime("%d.%m.%Y %H:%M:%S")
        if GPIO.input(21) == GPIO.HIGH:
            print('{} Schalter an Pin {} meldet offene Türe' .format(zeit, pin))
        else:
            print('{} Schalter an Pin {} meldet geschlossene Türe' .format(zeit, pin))
  • Hmm ... also der interne Pullup/Pulldown ist nicht aktiviert (das wäre blöde, weil der dann ja parallel zum externen geschaltet wäre)?
    Ist ein Schema zu erkennen, was überwiegt?


    Zudem geht man afaik meist genau anders herum vor ... also man verwendet einen Pullup und zieht das Signal mit einem Schalter dann auf GND.
    Das würde in Deinem Fall bedeuten einfach mal 3V3 und GND zu tauschen ...


    Das mit der "ausseridischen Störstrahlung" hat hier im Forum schon einige fast um den Verstand gebracht :lol:


    cu,
    -ds-
    Automatisch zusammengefügt:[hr]
    ooops ... grade erst entdeckt:


    ...


    sorry Kurt, aber auf keinen Fall ....
    Gewöhn' Dir das erst gar nicht an.
    In einer ISR (und sei's auch nur ein Eventhandler) niemals sleeps verwenden. Das ist eine programmiertechnische Todsünde und dafür kommst Du garantiert in die IT-Hölle ...


    cu,
    -ds-

  • @ds:
    Ja, ich weiß... Ich hab das in erster Linie gepostet, um ihm das Problem zu verdeutlichen. Er liest den aktuellen Status des Pins aus, während der Schalter noch prellt. Das ist kacke. Deswegen hab ich gesagt, warte bis er stabil ist.

  • @ds:
    Wenn er die angegebenen Scripte verwendet hat, voilá:


    Code
    # Pin als Eingang festlegen
    
    
    GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)


    Isch séhé un petitkleine PUD_DOWN, heißt rüntärr mit de résistance; ouioui


    rasray (der jetzt erst mal ein Döner futtern geht)

  • So, jetzt habe ich in den Scripten die pull_up_down rausgenommen, nachdem zw. gestern und heute morgen über 70 x ein LOW angekommen ist.
    Das Störsignal wird entweder über die Starterelektronik der Lampen gefunkt, oder es kommt über die Stromleitung.
    Also kommt ein bipolarer 100nF-Keramikkondensator an den Schalter und ein unipolarer 1000µ-Kondensator vor den Spannungsregler und ein unipolarer 1000µ-Kondensator hinter den Spannungsregler.
    Die Kondensatoren haben keine Besserung gebracht, beim ausschalten des Lichts (Neonröhre und Energiesparlampe) kommt ein LOW.
    Jetzt kanns ja nur noch am Kabel oder an den Widerständen liegen.
    Nach wie vor bekomme ich nur LOWs beim Script für steigende und fallende Flanken angezeigt, wenn die Türe geöffnet oder geschlossen wird.

  • angenommen deine Software ist OK,
    2 R sind trotzdem Mist und nach 3,3V schalten auch, es wird hier ein Spannungsteiler aufgebaut der nur zufällig funktioniert, optimal den Thread lesen und verstehen könnte helfen:
    http://www.forum-raspberrypi.d…ulldown-widerstaende-sein
    Automatisch zusammengefügt:[hr]
    Zusammenfassung:


    Echte pulldowns können so niederohmig sein wie sie wollen solange die Quelle und der Taster/Schalter das vertragen.



    Es ist immer eine gute Idee besser einen pullup nach 3,3V zu verschalten und den Taster nach GND schalten zu lassen


    Diese Betriebsart ist die Regel und sicherer, für die Widerstandsgröße gilt aber gleiches.
    Hintergrund, wenn der Port auf Ausgang und low steht wird der Strom in den Port durch den pullup begrenzt.


    In einer Schaltung mit "pulldown" und Taster nach +3,3V würde ein Tasterdruck bei Lötfehler oder falscher Porteinstellung auf output und low den Port killen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar ().

  • Problem gelöst: :thumbs1:
    Ich habe die Bouncetime auf 1 runtergestellt und siehe da, jetzt zeigt mir das Script alles schön und brav an.
    2 ist maximum, bei allem darüber überspringt er wieder.
    Da hätte ich auch früher drauf kommen können. :wallbash:
    Zusätzlich habe ich den 4,7k Ohm-Widerstand jetzt gegen einen 1kOhm-Widerstand getauscht, damit der 10kOhm-Widerstand den Pin nicht so schnell auf 0 zieht.
    :danke_ATDE:


  • Problem gelöst: :thumbs1:
    Zusätzlich habe ich den 4,7k Ohm-Widerstand jetzt gegen einen 1kOhm-Widerstand getauscht, damit der 10kOhm-Widerstand den Pin nicht so schnell auf 0 zieht.
    :danke_ATDE:


    damit ist der Spannungsteiler nun mal richtig, aus 2V high was knapp bis geht nicht ist wird 2,9V high was halt "richtiger" high ist.


    Trotzdem bleibt das so nicht optimal und kleiner sollte der 1k aus genannten Gründen nicht werden.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • Licht auch schon mal eingeschaltet? :D


    rasray


    Ja, Meldung: Türe geschlossen !
    Schlimmer wäre, wenn er Türe auf melden würde.
    Jetzt habe ich noch einen 100nF-Keramikkondensator zw. Pin21 und GND, bis jetzt ist Ruhe.
    Aber ich werde erst heute abend/nacht mitbekommen ob es geholfen hat, da meist erst dann das Phänomen auftrat/auftritt.
    MfG