Interrupt löst ungewünscht aus

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Community,

    nach langer Pause hab ich ein altes Projekt aufgegriffen und ein simples Skript geschrieben um eine Schaltschrankbeleuchtung über einen Türkontakt zuschalten zu lassen.

    zur Verdrahtung:

    -hardwareverschalteter 10kOhm Pullup gegen 5V
    -Türkontakt schaltet Masse auf GPIO Eingang durch
    -GPIO Ausgang schaltet nach Interrupt-Erkennung über einen Optokoppler eine 12V LED Beleuchtung zu.

    Problem: Störquelle Zimmerbeleuchtung. Schalte ich die Zimmerbeleuchtung, welche auf derselben Phase hängt wie der Pi zu, wird ein Interrupt erkannt. Habe den Pullup schon im Bereich 10kOhm bis 1kOhm runter getestet.

    Lösungsvorschläge an dieser Stelle?


    Hier mein vorläufiges Test-Skript:

  • Die einfachste Lösung ist die LEDs mit dem Türkontakt direkt zu schalten :D , aber das wird nicht Dein Ansinnen sein, sonst würdest Du Dir nicht die Mühe machen und über den RasPi gehen. Das Verhalten ist allerdings ziemlich ungewöhnlich. Ich nehme an, dass am Schaltkasten ein Massekontakt sitzt, so dass Du nicht einfach auf Pulldown und Schalten gegen +3,3V umspringen kannst, sonst wäre das mal zu probieren. Evtl. müsstest Du die Signalleitung entstören und auf die abfallende Flanke reagieren. Eine Ansicht Deiner Schaltung wäre hilfreich, damit wir von vornherein Missverständnisse ausräumen könne.

    P.S. Wenn Du time komplett importierst, brauchst Du Dir die sleepfunktion nich nochmal zu holen.

  • Die Möglichkeit der direkten Schaltung fällt weg, da ich das Signal später mal evtl. noch weiterverarbeiten möchte ;)

    Ich habe die Schaltung derzeit nur auf dem Breadboard aufgesteckt... habe es soeben mal mit den 3,3V vom Pi versucht, jedoch selbes Phänomen.

    Selbst wenn ich umkehre und auf fallende Flanke abfrage.

    Wie kann ich die Signalleitung entstören?

  • Hallo Cheat.008,

    der Stromkreis "Türkontakt" ist nicht geschlossen.

    Egal, ob die Tür öffen oder geschlossen ist, da passiert nichts.

    Der 10k-Widerstand dient nicht als Pullup - er hängt einfach in einem Strang, der nicht geschlossen ist.

    Was soll am GPIO17 passieren? Da passiert nichts, egal, ob die Tür offen oder geschlossen ist.

    Ein Signal hast Du, wenn gegenüber 3V3 oder GND eine Potentialdifferenz von > 1,3 V (= HIGH) oder < 0,8 V (= LOW) besteht.

    Du hast hier weder irgendwas an 3V3 noch an GND angeschlossen. Also kannst Du auch keinerlei Signal erwarten (also 2. Stromkreis, der nicht geschlossen ist).

    Mit einem 5V-Signal an einem GPIO ist schon so mancher Raspberry Pi gehimmelt worden - bisher jeder...


    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.

  • Ich würde auch den Code wie folgt abändern:

    [code=php]
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    import time
    import signal

    Tuer = 11
    Licht = 13

    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(Tuer, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    GPIO.setup(Licht, GPIO.OUT)

    def Tuerkontakt(gpio):
    if GPIO.input(Tuer) == GPIO.HIGH:
    GPIO.output(Licht, GPIO.LOW)
    print("%s -> Tür offen" % time.asctime())
    else:
    GPIO.output(Licht, GPIO.HIGH)
    print("%s -> Tür geschlossen" % time.asctime())

    try:
    GPIO.add_event_detect(Tuer, GPIO.RISING, callback=Tuerkontakt, bouncetime=100)
    #keep script running
    signal.pause()
    except KeyboardInterrupt:
    print("\nQuit\n")
    GPIO.cleanup()
    [/php]

    Änderungen:
    * GPIO pins als Variable definiert, damit nur noch diese bei Bedarf verändert werden müssten und nicht mehrere Zeilen im Code..
    * Software-PullUP aktiviert.
    * Die print (time.asctime() .. Zeilen waren falsch bzw dadurch wurde eine tuple zurück gegeben.
    * Die sleep's in der callback Anweisung sind überflüssig. Wenn dann bouncetime hoch stellen.
    * Durch die while Schleife am Ende wird sehr viel CPU-Last erzeugt. Besser mit signal arbeiten um den Script-Thread am beenden zu hindern.
    * try/except damit Fehlermeldungen bzw STRG+C abgefangen und sauber durchgeführt werden sowie bei letzterem auch GPIO zurückgesetzt wird.


  • ähm ... ohne gemeinsame Masse und 5V direkt am GPIO :s
    cu,
    -ds-


    Die 5V externe Spannungsversorgung für die Schaltung ist die gleiche der SPV des Pi.
    Desweiteren hast du recht, dass ist in der Zeichnung falsch, der Widerstand soll auf Masse liegen nicht auf 5V. Die Schaltung an sich funktioniert ja...



    Hallo Cheat.008,

    der Stromkreis "Türkontakt" ist nicht geschlossen.

    Andreas

    Doch ist er ;)

    Dieser schaltet mir Masse über den Türkontakt auf den GPIO Eingang



    Mach alles stromlos und warte! Sind die 5V Pflicht? Wieviel Strom braucht der Optokoppler? So gehts auf alle Fälle nicht!

    EDIT: Du hast den Optokoppler doch nicht wirklich so stecken, oder?

    Hab ja geschrieben, dass ich einen anderen Optokoppler verwende (5V Optokoppler). Schaltung funktioniert ja.


    Danke meigrafd werde das ein oder andere mal ausprobieren. Zumindest das mit try/except....


  • ... ist in der Zeichnung falsch, der Widerstand ...
    ...


    Wenn Du den auf Masse legst, dann passiert gar nix ... egal ob der Schalter offen oder geschlossen ist.
    Du weisst schon, was Du da machst, oder?


    ...
    Die Schaltung an sich funktioniert ja...
    ...


    ah ja :s (s.o.)

    cu,
    -ds-


  • Wenn Du den auf Masse legst, dann passiert gar nix ... egal ob der Schalter offen oder geschlossen ist.
    Du weisst schon, was Du da machst, oder?


    ah ja :s (s.o.)

    cu,
    -ds-

    Oh man zuviel drüber nachgedacht... klar muss er auf (+). ist er in der Schaltung auch...

    Mach dir mal um meine Schaltung keinen Kopf. Ich habe das gleiche Phänomen der Interrupstörungen bei den 3,3V! Bitte mal lieber darauf konzentrieren, denn wie ich bereits gefühlte 10x geschrieben habe funktioniert meine Schaltung. Einfach n bissle weniger an Kleinigkeiten aufgeilen danke :)

  • Naja, sie funktioniert aber nicht 100% denn sonst hättest du nicht diesen Thread erstellt :fies:

    Wenn also das Problem nicht an der Software liegt muss es zwangsläufig an der Schaltung liegen - und hier können Wir nur so gut helfen wie die Informationen sind die wir haben ... Wenn du dir also bitte noch mal die Mühe machen könntest deine aktuelle Schaltung korrekt darzustellen :huh:

  • Autsch ... :wallbash: ... da sind ja wieder 5V auf dem GPIO ... zudem eine LED direkt am GPIO - das dürfte bei einer Standard-LED mit ca. 20 mA mehr als eng werden.
    Aber das sind vermutlich wieder nur unerhebliche Randerscheinungen, an denen ich mich aufgeile :fies:

    Ich hoffe, Dein RPi ist bibelfest und vergibt Dir ... :angel:

    cu,
    -ds-


  • Autsch ... :wallbash: ... da sind ja wieder 5V auf dem GPIO ... zudem eine LED direkt am GPIO - das dürfte bei einer Standard-LED mit ca. 20 mA mehr als eng werden.
    Aber das sind vermutlich wieder nur unerhebliche Randerscheinungen, an denen ich mich aufgeile :fies:

    Ich hoffe, Dein RPi ist bibelfest und vergibt Dir ... :angel:

    cu,
    -ds-

    Puh 5V am GPIO? Dein ernst? Machst du das mit Absicht oder was ist deine Mission!? :O

    Ich würde dich bitten, dich aufs Wesentliche zu konzentrieren danke :D

    Falls du dich an vorherige Zeichnung erinnerst... ich habe den Optokoppler der Übersicht wegen weggelassen...

  • Hmm ... 3V3 ... naja ...
    Dann lass die LED auch weg ... 20 mA ... da provozierst Du eine Überlast. Kein Wunder, dass der RPi da instabil wird.
    Ich kann mir nicht vorstellen, dass Du mit einer korrekten Schaltung überfordert bist.
    Irgendwie irgendwas zusammenstecken ... das funktioniert nun mal nicht und entspringt Deinem Wunschdenken.
    Jetzt sind wir wegen eines lächerlichen Schaltkontakts bei der zweiten Seite ...

    bye,
    -ds-

  • Hallo Cheat.008,

    was wir Dir versuchen zu vermitteln - und das jetzt im 5. Beitrag - wenn irgendeine Leitung mit 5V beaufschlagt auf einen GPIO knallt, der nur zwischen 0 und 3,3 Volt "sehen" darf, dann macht es "pitsch" - und der Pi is hie, macht keinen Mucks mehr, fertig und aus, ... Rest in Peace.

    Wir haben es Dir vermittelt - es liegt an Dir, aus schlechter Erfahrung dazu zu lernen - oder auf erfahrene Anwender zu hören, die entweder diese Erfahrung gemacht haben oder es bislang erfolgreich haben vermeiden können.

    Wenn irgendein Signal mit 5V oder mehr beaufschlagt ist, dann nutze einen Spannungsteiler, der nur max. 3,3 V an den GPIO-Pin, der dieses Signal auswerten soll, weitergibt.

    Die meisten arbeiten hier mit 2 mA - max. 3 mA - pro GPIO-Pin - nicht 20 oder so. LED ohne Widerstand direkt am GPIO zu betreiben, ist grob fahrlässig. Berechne den zu verwendenden Widerstand und setze diesen in der Schaltung ein.

    Ich bin dann hier raus.

    Beste Grüße und himmele den Raspberry nicht sofort...

    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 (22. Dezember 2014 um 21:13)


  • Jetzt weiß ich auch wie du zu deiner Menge an Posts gekommen bist :O

    Ich kann nicht nachvollziehen warum du nicht verstehen kannst, dass meine Schaltung wie im Bild Anhang#1 bezüglich der Interrupterkennung durch den Türkontakt als auch dem Zuschalten der Schaltschrankled´s funktioniert hat.
    Ich hoff einfach du realisierst noch, dass in meiner Schaltung wie sie vor mir liegt, ein Optokoppler (wie gesagt) vom GPIO angesteuert wird, welcher mir einen zweiten Stromkreis an die LED(s) bringt. Das in der Zeichnung ist nur eine schematische Darstellung. Den Optokoppler habe ich in der zweiten Zeichnung weggelassen (wie schon erwähnt!) da bereits von einem anderen User überlesen wurde, dass ich diesen nicht im Firtzing hatte wie ich ihn verbaut und angeschlossen habe - und um Missverständnissen vorzubeugen HAB ICH DEN OPTOKOPPLER (schönes Wort) WEGGELASSEN .... und auch an der Stelle sei nochmal erwähnt: ER IST ABER VERBAUT ( ohje schon wieder kompliziert.... )

    Ich denke wenn du die einzelnen Wörter dieses Threads einmal Schritt-für-Schritt anneinanderreihst wirst du auch nicht mit 5V und 3V durcheinanderkommen ;)

    Um mein Problem nochmals von Beitrag#1 aufzugreifen: Selbst bei Verwendung der 3,3V des RPi löst ein Zuschalten meiner 230V Deckenleuchte einen Interrupt aus und dieses Störverhalten konnte ich bisjetzt nicht lösen und hoffe auch weitere Lösungsvorschläge.

    Die genannte Softwareanpassung hab ich gemacht, jedoch ohne Erfolg...

Jetzt mitmachen!

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