Nur eine Flanke wird erkannt

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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 Taster entprellen

  • 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!

    Zitat

    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.

    Einmal editiert, zuletzt von rasray (5. März 2016 um 13:39)

  • 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

    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???

    Einmal editiert, zuletzt von rasray (5. März 2016 um 13:58)

  • 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

    Bilder

    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 (5. März 2016 um 14:17)

  • 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))

    Einmal editiert, zuletzt von KrawallKurt (5. März 2016 um 14:26)

  • 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:
    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:
    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:
    Wie niedrig dürfen Pulldown-Widerstände sein?
    Automatisch zusammengefügt:
    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)

    Einmal editiert, zuletzt von jar (6. März 2016 um 10:18)

  • 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

Jetzt mitmachen!

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