Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 6:57 pm

Hi,
ich möchte per Taster mein Pi herunterfahren können.
Hier zu habe ich eine Schaltung aufgebaut, welche dem Bild entspricht. Anmerkung: Der Taster schließt, wenn man ihn drückt.

Um die Ressourcen vom Pi zu schonen habe ich mich für eine Interrupt-Lösung mittles Python entschieden.

Quellcode:

Code: Select all

#!/usr/bin/env python2.7
import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BCM)

# GPIO 23 set up as input. 
GPIO.setup(23, GPIO.IN)

try:
    GPIO.wait_for_edge(23, GPIO.RISING)
    os.system("sudo shutdown -h now")
except KeyboardInterrupt:
    GPIO.cleanup()       # clean up GPIO on CTRL+C exit
GPIO.cleanup()           # clean up GPIO on normal exit
Der Code wird beim Bootvorgang gestartet. Soweit alles wunderbar. Der Rechner schaltet sich jedoch nach einem nicht konstanten Zeitfenster selbstständig aus.
Der shutdown-Befehl kommt von dem obrigen Python-Script und nicht durch andere Scripte/Probleme, das ist schonmal garantiert.
Fehler in der Schaltung sehe ich auch keine, habe ich doch extra (um solche Fehler zu vermeiden) einen Pullup-Wiederstand verbaut. Ziehe ich das Kabel vom GPIO23 ab, habe ich keine Probleme mehr ...
Ich bin ratlos ... Wo liegt mein Fehler?? :?
Attachments
schaltung.jpg
schaltung.jpg (12.34 KiB) Viewed 11128 times

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 7:12 pm

Bist du sicher das GPIO.wait_for_edge ein Interrupt ist? Klingt eher nach Warteschleife. Und die gibts oft mit timout.

Interrupts haben meist events die vom normalen Ablauf getrennt sind. Sie werden ja nur ausgeführt wenn ein interrupt passiert. Inzwischen soll das normale Programm weiterlaufen

Zeig mal die Dokumentation zu dem python framework
<~~>

Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 7:22 pm

mline wrote:Bist du sicher das GPIO.wait_for_edge ein Interrupt ist? Klingt eher nach Warteschleife. Und die gibts oft mit timout.
Bin mir schon ziemlich sicher :P
http://code.google.com/p/raspberry-gpio ... iki/Inputs

ghp
Posts: 1412
Joined: Wed Jun 12, 2013 12:41 pm
Location: Stuttgart Germany
Contact: Website

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 7:28 pm

Hallo,

spannender Effekt. Vielleicht liegt es daran, dass der interne pullup aktiv ist ? Der ist - sagt das Internet - so um die 50k. Das ergibt 0.55 V am Eingangspin, was mit ein wenig Rauschen schnell als logisch 1 interpretiert wird.

Mit einen hochohmigen Voltmeter mal dis Spannung messen ?

Ein Pull-Down wäre hier besser.

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

Grüsse
Gerhard

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 7:41 pm

ghp wrote:Ein Pull-Down wäre hier besser.
Er hat ja einen Pulldown verbaut. Aber geschrieben hat er Pullup.
Wenn es ein Pullup ist kann das natürlich nicht funktionieren weil der GPIO dauerhaft HIGH ist.
Dann müsste Mann den Taster auf GND schalten und auf fallende Flanke prüfen
<~~>

ghp
Posts: 1412
Joined: Wed Jun 12, 2013 12:41 pm
Location: Stuttgart Germany
Contact: Website

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 7:44 pm

interner pullup bzw interner pulldown. Für diese Schaltung wäre ein interner pulldown besser.
Oder mal versuchshalber den externen Pulldown auf 1k verkleinern.
Wie gesagt: mal die Spannung am Pin mit offenem Schalter messen. Wenn das so um die 0.5..0.6V sind, dann trifft meine Theorie zu.

Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Re: Shutdown-Taster macht sich selbstständig

Wed Jul 03, 2013 8:31 pm

Okay, nun der Reihe nach ... Ich stehe mittlerweile auf dem Schlauch ...

Ich habe nun ein Messgerät zwischen GND und GPIO23 bei offenen Schalter gehängt: 6,6mV
Muss aber nicht unbedingt was heißen ... Die Zuverlässigkeit des Messgerätes ist fraglich.

Wieso soll in dieser Schaltung ein interner Pulldown besser als ein externer sein? :|

Aktuell funktioniert es so, wenn auch eben mit den besagten "Störungen":
Taster nicht gedrückt:

Code: Select all

cat /sys/class/gpio/gpio23/value 
0
Taster gedrückt:

Code: Select all

cat /sys/class/gpio/gpio23/value 
1
Genau diese Reaktion war eigentlich auch mein Ziel ...
Taster nicht gedrückt: Der Gerät sagt 0.
Taster gedrückt: Der Gerät sagt 1.
Daher auch der python-Code: GPIO.wait_for_edge(23, GPIO.RISING)


Mich verwirrt diese intere Pullup/-down Geschichte total ... Ich dachte die Dinger sind standardmäßig nicht aktiv. Kann man mir mal erklären wie ich mir den Schaltplan vorzustellen habe, wenn man die Widerstände aktiviert?
Ich bin mir nicht ganz sicher ob der Wert des 1k-Widerstandes korrekt ist. Im Internet liest man öfters auch mal was von 330Ohm.
Aktuell herrscht komplette Verwirrung im meinem Kopf :?


Nachtrag:
GPIO.setup(23, GPIO.IN) -> 9,8kOhm
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) -> 7,7kOhm
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) OHNE meinen 10kOhm Widerstand: 44,3kOhm
Die Pulldowns sind also standardmäig nicht aktiv.

ghp
Posts: 1412
Joined: Wed Jun 12, 2013 12:41 pm
Location: Stuttgart Germany
Contact: Website

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 5:36 am

Hallo, wenn da - Schalter offen - etwa 6.6mV anliegen, dann sind interne pullup tatsächlich nicht aktiv.

Der Wert des externen pulldown kann so abgeschätzt werden:
bei 10 k, 3.3V fliessen 0.33 mA bei gedrücktem Schalter zwischen plus und minus. Das ist in Ordnung.

Untersucht man zwei Extreme, dann wird deutlicher warum 10k ein guter Wert ist:
- bei 1M, 3.3V fliessen 3.3 uA bei gedrücktem Schalter. Das ist schon in der Grössenordnung von Kriechströmen und wenn man mal die Schalterkontakte mit dem Finger überbrückt, dann würde wegen des geringen Widerstandes der Haut das wohl anschlagen (VORSICHT: Nie unnötigerweise Elektro berühren, Isolierung des Netzteiles und der anderren Geräte beachten!!).
- bei 100, 3.3V fliessen 33mA. Das belastet schon die Stromregler des Raspi, 50mA sollten da max aus derm GPIO-Connector gezogen werden, also keine gute Idee.

Pulldown von 1k bringt 3.3mA, ist auch noch in Ordnung. Die 330Ohm (== 10mA) sind eher für LED als Vorwiderstand gedacht.

Der Serienwiderstand von 1k aus Deiner Schaltung ist zur Absicherung des GPIO-Pin gedacht. Wenn der aus Versehen auf Ausgang steht, und low-Werte ausgibt, dann wäre ein gedrückter Schalter (ohne den Serienwiderstand) ein Kurzschluss gegen plus. Mit Serienwiderstand 1k fliessen da 3.3mA, also geht nichts kaputt. 16mA werden als max Strom für GPIO-Ausgang angegeben.

Jetzt noch ein Satz zu den internen Pullup/down. Der komplette Schaltplan ist in der Anlage für internen pullup.
Es wird klar, dass bei den angenommenen 50k intern, Rs=1k und extern 10 k im offenen Zustand des Schalters ein Spannungsteilernetzwerk am Eingang des GPIO-Inputs (das Dreieck, dessen Eingangswiderstand wird sehr hochohmig angenommen) liegt. Mit diesen Werten ist die Spannung 3.3 / (50k+1k + 10k) * (1k+10k) = 0.59V.
Bei 0.8V wird manche Logik schon von '0' zu '1' umschalten. Der Rauschabstand mit ca 0.2V ist also gering.
Daher auch die Idee, den externen 10k mal zu 1k zu verkleinern. Dann ist die Spannungsteilerspannung 3.3 / (50k+1k + 1k) * (1k+1k) = 0.12V, was deutlich weiter von 0.8V weg ist.

Die Funktion der Schaltung wird hier durch die externe Beschaltung definiert. Der ggf. interne pullup/pulldown sichert den GPIO-Eingang vor allem auch gegen statische Elektrizität , für den Fall dass die externe Schaltung mal nicht angesteckt ist, und sichert für diesen Fall auch einen definierten Pegel.
Deswegen auch meine Überlegung, dass ein interner pullDOWN hier günstiger wäre.
Spannung Schalter offen wäre 0V. Also ideal. Pegel ohne Schaltung angeschlossen ist LOW, das heisst bei nicht angeschlossener externer Beschaltung passiert nichts, zumindest kein shutdown mit dem Programm.

Zusammenfassung: Deine Messung von ein paar Millivolt bestätigt, dass interner pullup nicht aktiv ist.
Also alles zurück auf Start. Wenn die Kabel nicht extrem lang sind (grösser als Meter), oder parallel zu Stromkabeln liegen (wo viele Kilowatt fliessen), dann würde ich Kabelbruch untersuchen. Wenn die Verbindung zwischen Eingang Raspberri zu Rs=1k zu pulldown 10k zu Masse Schaltung zu Masse Raspberri irgendwo eine kalte Lötstelle hat, kann diese bei Bewegung der Schaltung oder Wärmeunterschieden sporadisch sich öffen und der Eingang des Raspi funktioniert dann 'wie eine Antenne'. In solchen Fällen ist der Widerstand des Lötmittels, welches als Reste auf Platinen bleibt, schon ein Problem.

Hoffe, dass ich das übersichtlich darstellen konnte
Grüsse
Gerhard
Attachments
pullup.gif
pullup.gif (8.4 KiB) Viewed 11077 times

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 5:48 am

Die Abfrage im Programm ist das Problem.
Versuch es mal mit der Threads Variante von der Seite die du vorhin gepostet hast.

Lass dir statt dem shutdown mal Text ausgeben oder schalte ne LED damit. Du wirst sehen das der Befehl ausgeführt wird sobald dein Programm gestartet wird
<~~>

FM81
Posts: 518
Joined: Wed Apr 17, 2013 4:33 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 8:12 am

Deine Leitung zum Taster ist eine Antenne und fängt alle möglichsten Störungen ein; der kürzeste Impuls reicht u.U. bereits aus!

Den 10k-Widerstand mit einem geeigneten Kondensator überbrücken (100nF ... 1µF) - das fängt das Gröbste auf ...
Generell scheint mir jedoch die Lösung mit "Taster nach GND" weniger störanfällig, doch selbst da kann der beschriebene Kondensator nicht schaden.

MfG, FM_81
A: What does the command 'cat /dev/urandom', can you tell me please?
B: Yeah, that's very simple: It feeds your cat with radioactive material!

Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 8:18 am

Guten Morgen :)
ghp wrote:Daher auch die Idee, den externen 10k mal zu 1k zu verkleinern. Dann ist die Spannungsteilerspannung 3.3 / (50k+1k + 1k) * (1k+1k) = 0.12V, was deutlich weiter von 0.8V weg ist.
Das werde ich heute Abend ausprobieren. Teoretisch kann ich den externen Pulldown dann auch komplett weglassen oder? So das lediglich der interne 50k als Pulldown wirkt.
ghp wrote:Die Funktion der Schaltung wird hier durch die externe Beschaltung definiert. Der ggf. interne pullup/pulldown sichert den GPIO-Eingang vor allem auch gegen statische Elektrizität , für den Fall dass die externe Schaltung mal nicht angesteckt ist, und sichert für diesen Fall auch einen definierten Pegel.
Deswegen auch meine Überlegung, dass ein interner pullDOWN hier günstiger wäre.
Spannung Schalter offen wäre 0V. Also ideal. Pegel ohne Schaltung angeschlossen ist LOW, das heisst bei nicht angeschlossener externer Beschaltung passiert nichts, zumindest kein shutdown mit dem Programm.
Das überzeugt. :)
ghp wrote: ... würde ich Kabelbruch untersuchen.... irgendwo eine kalte Lötstelle hat, kann diese bei Bewegung der Schaltung oder Wärmeunterschieden sporadisch sich öffen und der Eingang des Raspi funktioniert dann 'wie eine Antenne'.
Gutes Argument. Aktuell ist alles nur auf einer Steckplatine befestigt. Ich hatte damit zwar noch nie Probleme, aber ich werde das heute Abend mal auf eine Lochrasterplatine löten.

ghp wrote: Hoffe, dass ich das übersichtlich darstellen konnte
Jap, sehr gut sogar :) Vielen Dank hierfür :)
mline wrote:Die Abfrage im Programm ist das Problem. Versuch es mal mit der Threads Variante von der Seite die du vorhin gepostet hast.
Lass dir statt dem shutdown mal Text ausgeben oder schalte ne LED damit. Du wirst sehen das der Befehl ausgeführt wird sobald dein Programm gestartet wird
Jau, das stimmt. Ich vermute, dass du folgendes gemeint hast:

Code: Select all

channel = 23
def my_callback_stuff(channel): 
    print('button pressed') 


GPIO.add_event_detect(channel, GPIO.RISING) 
GPIO.add_event_callback(channel, my_callback_stuff)
Starte ich das Programm, wird mir direkt "button pressed" ausgegeben. Verwende ich jedoch die Methode von oben GPIO.wait_for_edge(23, GPIO.RISING), habe ich das Problem nicht. Das Problem, dass dieses Event ausgelöst wird, kommt bei mir nicht direkt beim Programmstart sondern erst nach 10Minuten oder manchmal auch erst nach paar Stunden ...
Ich stehe so bisschen im Zwiespalt. Einerseits wäre es möglich, dass eine "kalte Lötstelle" (bzw. eher eine wackelnde Steckverbindung) das Event auslöst. Andererseits traue ich der Library nicht zu 100%, wenn es um Interrupts geht. Ich habe bis heute bspw. noch keinen Unterschied zwischen
GPIO.wait_for_edge(channel, GPIO.RISING),
GPIO.wait_for_edge(channel, GPIO.FALLING) und
GPIO.wait_for_edge(channel, GPIO.BOTH)
gefunden. Auf die Interrupt-Lösung möchte ich jedoch nicht verzichten, da die Alternative ala

Code: Select all

import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
while True:
    if(GPIO.input(23)):
        os.system("sudo shutdown -h now")
        break
    time.sleep(1)
wahnsinnig ressourcenfressend ist. Ich habe das "ressourcenfressende" Script über Nacht heute laufen gelassen - Ergbenis: Mein Pi war noch an als ich wach war. Das kann aber auch Zufall sein, da ich mit der Interrupt-Lösung auch oft über Stunden keine Probleme habe. Zudem könnte es auch sein, dass die kurzen Störungen (via kalte Lötstelle etc.) wärend dem sleep(1) zuschlagen.


Zusammenfassend:
Teoretisch bräuchte ich überhaupt keine Widerstände. Ich verwende einfach den internen Pulldown (~50k) und sorge dafür, dass der GPIO-Pin nicht als Ausgang definiert wird (, was mir den 1k Widerstand spart). Habe ich das so richtig verstanden?

Ich denke, ich werde erst die "Hardwareseite" auf Mängel prüfen. Ein richtiger Gedankensblitz, wie ich die Softwareseite prüfen könnte, kam mir noch nicht.

Nochmals Danke für all eure Unterstützung :)

Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 8:20 am

FM81 wrote:Den 10k-Widerstand mit einem geeigneten Kondensator überbrücken (100nF ... 1µF)...
Verstehe ich nicht zu 100%. Wie genau hättest du den Kondensator anschließen?

FM81
Posts: 518
Joined: Wed Apr 17, 2013 4:33 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 8:29 am

Na ich meine die eine Seite des Kond. an den "Treffpunkt" von R1 und R2 und die andere Seite Masse. Die ganzen Bauteile natürlich "nahe am RasPi" und "nicht nahe am Taster" ...

MfG, FM_81

PS: Noch ein Wort zum Ressourcenverbrauch (pers. Erfahrung, allerdings nur in C, nicht in Python):
- die Interrupt-Methode etwa 1 Sekunde Prozesszeit pro ~6h
- die Methode mit 250ms Wartescheife (ohne Interrupt-Nutzung): ca. 1 - 2 Sekunden Prozesszeit pro Stunde
A: What does the command 'cat /dev/urandom', can you tell me please?
B: Yeah, that's very simple: It feeds your cat with radioactive material!

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 5:05 pm

FM81 spricht von einem Filter. Noch besser wäre eine Entprellung für den button als Software. Ziehe dazu Google zu rate ;-)
<~~>

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 5:09 pm

Ach einen unterschied der drei Arten falling rising und booth wirst du mit einem Druck auf den button nicht merken.

Der unterschied ist das bei einem Rechtecksignal der Befehl bei falling auslöst wenn das level von high auf low fällt, bei rising von low auf high steigt und booth wenn eine der beiden Flanken erkannt wird.
Bei einem Druck auf den button hast du beide Signale in einem Abstand von etwa 200ms und damit kannst du mit dem auge nicht genau feststellen welche Flanke dein Druck ausgelöst hat
<~~>

FM81
Posts: 518
Joined: Wed Apr 17, 2013 4:33 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 5:31 pm

Nicht ganz! Beim Entprellen (per Software) willst Du verhindern, dass mehrfache Impulse fälschlicher Weise erkannt werden. Das wäre im konkreten Falle vielleicht sogar egal, denn nach dem ersten würde die "Abfrageschleife" schon verlassen, und es würde schon runter fahren. Weitere würden schlichweg unwirksam sein. (In vielen anderen Fällen wird das Entprellen zweifellos sinnvoll und richtig sein.)

Wenn aber Dein erster Impuls (der die Schaltung ungewollt auslöst) durch ein Störsignal und nicht durch einen Tastendruck entsteht, nutzt Dir auch eine Entprellung wenig! Woher soll die Software das wissen? Da müsstest Du definieren:
- so lang = Störsignal
- andere Länge = gewollter Tastendruck

MfG, FM_81

NACHTRAG: Und wenn Dich beim Interrupt sowieso nur die Flanke interessiert (egal ob fallend oder steigend) fällt die Definition mit "Länge" sowieso flach.
A: What does the command 'cat /dev/urandom', can you tell me please?
B: Yeah, that's very simple: It feeds your cat with radioactive material!

ghp
Posts: 1412
Joined: Wed Jun 12, 2013 12:41 pm
Location: Stuttgart Germany
Contact: Website

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 6:10 pm

Hallo,

habe für ein Projekt eine einfache Tastenentprellung geschrieben, hier der pseudocode

Code: Select all

def getSwt():
    ... read input and return value

def main():
    MAX = 10
    buttonCnt = 0
    while True:
         time.sleep(0.05)
         if getSwt():
              buttonCnt += 1
              if buttonCnt > MAX:
                    buttonCnt = MAX
        else:
              buttonCnt -= 1
              if buttonCnt < 0:
                    buttonCnt = 0

        if buttonCnt == 10:
              # Button is definitely pressed, perform action
              print ("button pressed")
Es wird regelmässig, hier 20 mal die Sekunde, ein Port pin eingelesen. Damit wird ein Zähler hoch- bzw runtergezählt. Wenn der Status einige Zeit auf High ist, wird der Wert des Zählers den Maxwert erreichen und der Button wird als gedrückt gemeldet.
Da dauert hier 0.5 sec.
Kleinere sleep-times als 10 ms sollte man nicht unbedingt einstellen, da diese nicht mehr genau ausgeführt werden.
Mit dieser Methode und verschieden langen Wartezeiten habe ich ein 'ein knopf-Bedienkonzept' für eine kleine Anwendung geschrieben. Kurzer Druck: Aktionen durchsuchen, langer Druck: Auswählen, einige Zeit kein Button (idle) zurück in Ausgangszustand.

Grüsse
Gerhard

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 6:15 pm

Wenn das Teil Störungen länger als 200ms abbekommt die noch dazu einen high Pegel erzeugen sollte man die ganze Sache sowieso mal überdenken. Ich mach schon seit Jahren mit phasenanschnittssteuerung, pwm, ppm und so teilen störenden Sachen rum ohne je Probleme mit Störungen in Steuerleitungen zu haben.
Entprellung hilft sehrwohl, da Störungen zB beim einschalten eines Motors nicht so lange dauern dürfen. Tun sie es trotzdem ist das pfusch und muss besser entstört werden.

Fakt ist das eine Störung die so viel Spannung in seine Leitung induziert ein Problem das gelöst werden muss. Alles andere ist workaround und führt früher oder später wieder zu Problemen. Darum gabs von mir keine andere lösung.
<~~>

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 6:21 pm

FM81 wrote:
NACHTRAG: Und wenn Dich beim Interrupt sowieso nur die Flanke interessiert (egal ob fallend oder steigend) fällt die Definition mit "Länge" sowieso flach.
Darum ja entprellung mit einbauen. Erkennt die Software einen high Pegel wirkt die entprellung. Dauert die Störung nur weniger als ein paar ms wird sie ignoriert. Dauert sie länger ist die Störung zu heftig und es muss dafür gesorgt werden das sowas nicht mehr passiert.
<~~>

Fly
Posts: 12
Joined: Mon Jun 24, 2013 7:44 pm

Re: Shutdown-Taster macht sich selbstständig

Thu Jul 04, 2013 6:50 pm

Grml, ich habe keine Platine mehr hier. Gelötet wird also erst am Wochenende. :x Zwischenzeitlich habe ich einen 1µF Kondensator in die Schaltung integriert. Mal schauen ob der Filter ausreichend filtert und das Board morgen noch an ist :D

Die Idee mit der Tastenprellung kam mir auch schon. Habe ich jedoch wieder verworfen, da ich für ein anderes Projekt eine ähnliche Schaltung benötige, die jedoch schnell und zuverlässig schalten muss. Zwar wäre es bei diesem Projekt kein manueller Taster, sondern ein Reflexkoppler, doch die Funktion ist ja die gleiche. Zudem bin ich kein Fan von Sleep :roll:
Am Wochenende werde ich die Schaltung mal sauber auf einer Platine aufbauen, mal schauen ob es zuverlässig funktioniert.
Vielleicht löst ja sogar der Kondensator das Problem. Wenn weiterhin Probleme auftauchen, stehe ich vor einem Problem ... In diesem Projekt wäre mir ein Sleep zwar nicht recht, aber an sich Banane. :mrgreen: Beim Reflexkoppler könnte ich das nicht machen. Dafür dreht sich das Rad zu schnell, welches der Reflexkoppler auswertet.
Ich halte euch auf dem laufenden :P
mline wrote:Der unterschied ist das bei einem Rechtecksignal der Befehl bei falling auslöst wenn das level von high auf low fällt, bei rising von low auf high steigt und booth wenn eine der beiden Flanken erkannt wird.
Bei einem Druck auf den button hast du beide Signale in einem Abstand von etwa 200ms und damit kannst du mit dem auge nicht genau feststellen welche Flanke dein Druck ausgelöst hat
Und wenn ich den Taster gedrückt halte? Dann kann doch nur die Flanke von low auf high wandern und nicht umgekehrt. Trotzdem löst GPIO.RISING, GPIO.Falling wie auch GPIO.BOTH aus. :?

User avatar
mline
Posts: 1307
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Shutdown-Taster macht sich selbstständig

Fri Jul 05, 2013 3:02 pm

Fly wrote:Und wenn ich den Taster gedrückt halte? Dann kann doch nur die Flanke von low auf high wandern und nicht umgekehrt. Trotzdem löst GPIO.RISING, GPIO.Falling wie auch GPIO.BOTH aus. :?
Da dein Taster nicht entprellt ist bringt ein gedrückt halten nichts.
Siehe Signal auf Bild 2 http://de.wikipedia.org/wiki/Prellen

Wenn du nur eine steigende Flanke detektierst und das Programm verlässt macht das kein Problem da die nachkommenden Flanken dann sowieso nicht mehr ausgelesen werden. Willst du aber nur auf eine fallende Flanke reagieren musst du den Taster entprellen (per Software oder mit elekt. Bauteilen) damit ein sauberes Rechtecksignal ausgegeben wird. So wird erst beim Loslassen eine fallende Flanke erkannt.
<~~>

ghp
Posts: 1412
Joined: Wed Jun 12, 2013 12:41 pm
Location: Stuttgart Germany
Contact: Website

Re: Shutdown-Taster macht sich selbstständig

Tue Jul 16, 2013 3:21 pm

Hallo Fly,

hat sich hier was ergeben in der Zwischenzeit ? Du wolltest ja den Aufbau löten, und vermutlich sollte ja dann Stabilität einkehren...

Gerhard

ron47
Posts: 12
Joined: Mon May 13, 2013 10:35 am

Re: Shutdown-Taster macht sich selbstständig

Wed Feb 08, 2017 1:34 pm

Hallo Forum,

ich bin am Verzweifeln. Ich habe das gleiche Problem wie von Fly, oben beschrieben. Ich habe bereits alle Vorschläge aus diesem Post ausprobiert.
2 X 10K
1 X 10K + 1 X 1K (1K immer zwischen Taster und GPIO!)
PullDown + 1 X 10K + 1 X 1K
PullDown + 1 X 1K

Über den Interrupt schalte ich über einen anderen Ausgang eine LED.
Ich habe in meinem Zimmer eine alte Leuchtstofflampe. Beim Einschalten von dieser Leuchtstofflampe löst dies zuverlässig der Interrupt aus. Natürlich könnte ich eine Kondensator in die alte Lampe einbauen. Dies würde mir aber nicht helfen, da ich die Schaltung überall einsetzen möchte.

Ich nutze C++, WiringPi (INT_EDGE_RISING).

Bitte um Hilfe!!!

Ron

smartifahrer
Posts: 882
Joined: Sat Feb 13, 2016 8:10 am

Re: Shutdown-Taster macht sich selbstständig

Thu Feb 09, 2017 6:50 am

Hört sich nach Netz-Spannungs Sörungen an oder nach einer "langen" Leitung vom GPIO zum Taster. Auf den Interrupt zu reagieren ist schon mal gut. Es reicht hier aber nicht, nur auf das auslösen zu reagieren. Das Programm sollte unbedingt prüfen ob die Taste noch eine Zeitlang gedrückt bleibt so 1-2 Sekunden eher mehr. Die weitere Prüfung natürlich ohne Interrupt Auslösung und kontinuierlich. Also nicht einfach nach der Wartezeit wieder. Könnet ja wieder ein Störimpuls sein.
Die längere Zeit hat 2 Gründe:
1. Kein Störimpuls ist so lange. AUch nicht das prellen des Taster.
2. Muss die Taste länger gedrückt gehalten werden, kann damit ein runterfahren durch versehentliches drücken des Tastern verhindert werden.

PS: Der Raspi hatte mal ein Bauteil in der Spannungsversorgung das empfindlich auf Lichtblize (Kamerablitz z.B.) reagiert hat. Vielleicht kommt die Störung auch hier her.

ron47
Posts: 12
Joined: Mon May 13, 2013 10:35 am

Re: Shutdown-Taster macht sich selbstständig

Thu Feb 09, 2017 12:55 pm

Hallo smatifahrer,

danke, für die schnelle Hilfe.
Hört sich nach Netz-Spannungs Sörungen an oder nach einer "langen" Leitung...
Lange Leitung ist es nicht. Ich habe die Schaltung noch auf meiner Experimentierplatine und das es mit der Netz-Spannung zu tun hat ist mir auch klar.

Ich habe bis jetzt zur einen Filter programmiert, der das Prellen innerhalb einer Sekunde ausfiltert.
Doch super Hinweis mit dem längeren Drücken. Ich werde nach Auslösen des Interrupts, innerhalb drei Sekunden, durch mehrmaliges abfragen des GPIO prüfen, ob der geänderte Pegel immer noch anliegt.

Ich denke damit ist mein Problem gelöst. Danke

Ron

Return to “Deutsch”