Mal wieder "Taster" Ärger an GPIO pin

  • Moin

    ich hab eine einfache Wasserstandssteuerung in Betrieb. Läuft seit Jahren problemlos. Ein Schwimmerschalter schaltet mir den GPIO 0 zu GND durch wenn der Pegel zu niedrig ist. Damit schaltet sich ein Relais an, lässt eine Pumpe laufen und nach ein paar Sekunden macht der Schwimmerschalter wieder zu. Das war nie ein Thema, ging immer. In der /boot/config steht der Pin mit Pullup drin.

    Per bash frag ich den Zustand ab

    Geht GPIO 0 auf 1 wird über GPIO das Relaisboard angesteuert. Eigentlich nicht dramatisch.

    Jetzt fing es die letzten Tage an das ich das Relaisboard klicken hoerte. Dachte der Schwimmerschalter hat evtl. einen Wackelkontakt o. ä.

    Durchgemessen, der ist absolut in Ordnung und schaltet zuverlässig. Alles wieder angeschlossen und ein kleines Terminalprogramm zum Auslesen des Pins alle paar ms gestartet.

    Schaltet der Schwimmerschalter geht der GPIO auf 1 und springt sofort wieder auf 0, also low. Dann wieder auf 1 und wieder auf 0. Klingt am Relais wie der Blinker im Auto. :(

    Manchmal auch verzoegert oder nur ein paar mal hintereinander...also nicht wirklich reproduzierbar. Jedesmal anders...


    Nachdem ich dann den Mittag damit verbracht hab alle moeglichen Tutorials und Forumbeiträge zu lesen über das Thema bin ich kein Stück schlauer.

    Der Pi hat eine eigene Stromversorgung, schließe ich den Schwimmerschalter an GPIO 0 und an irgendeinen GND Pin der GPIO Leiste an schaltet PIN 0 nie auf high! Er will einfach nicht. Echt schräg!

    Schließe ich den PIN der auf GND gehen sollte an das zweite 5V Netzteil an was ich dort auch noch verbaut habe dann schaltet der PIN 0 auf high. Das kann ich mir auch nicht erklären wieso es über den Weg geht, aber die internen Pins nicht.

    Ich werd jetzt mal umbauen und den Schalter auf hardware Pullup, also 3.3v über10K Widerstand am GPIO0 zusätzlich und den PU softwareseitig aus der boot config rausnehmen. Habt ihr noch eine Idee?

    Mir fällt nichts mehr ein sonst. :conf:

    Den Pi hab ich heute morgen schon getauscht, daran lags wohl nicht. Gleiches Verhalten.

  • Da kann sich an der Mechanik des Schwimmerschalters etwas geändert haben, sodass er auf die Wellenbewegung der Wasseroberfläche anders reagiert.

    Überprüfe auch, ob "sleep 0,5" auf Deinem System überhaupt ein gültiger Zeitinterwall ist.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Servus

    ich hatte auch den Schwimmerschalter in Verdacht aber der ist 100% ok, prellt nicht. Viel Welle ist da nicht daran liegt es nicht.

    Den hab ich ausgebaut, fest mit einem Widerstandsmessgerät verdrahtet und geschaut ob da was zickt. Nichts, das kann die Ursache nicht sein.

    ICh loete gleich mal die 10K dazwischen und geb die 3.3V mit rauf, aber wieso sollte das jetzt notwendig sein.

    Sleep 0.5

    hält das Skript für eine halbe Sekunde an, sollte passen. hatte es bis letzte woche ja auch.

  • Schließe ich den PIN der auf GND gehen sollte an das zweite 5V Netzteil an was ich dort auch noch verbaut habe dann schaltet der PIN 0 auf high.

    GPIOs an 5V anschließen ist nicht so die beste Lösung.

    Ein 10kOhm-Widerstand vom GPIO zu GND bewirkt manchmal Wunder. :cool:

    In diesem Fall eher ein "blaues Wunder", denn seine Schaltung setzt einen Pullup voraus und der Schwimmer schaltet nach GND. Zumindest ist das so den Ausführungen zu entnehmen.

    Wie wäre es mit einer systematischen Fehleranalyse? Was man hier lesen muss sind unausgegorene Aussagen über das Fehlerbild, dilettantische Fehleranalyse und hanebüchene Empfehlungen und Mutmaßungen.

    Es gibt hier fünf unmittelbar maßgebliche Komponenten: Einen Schalter, einen Eingang, ein Programm, einen Ausgang und ein Relaismodul. Es kann doch nicht so schwer sein, festzustellen, welche dieser 5 Komponenten den Fehler verursacht...

    Immerhin, die Betrachtung des Eingangssignals mit dem Terminalprogramm ist ja schon mal grundsätzlich ein richtiger Schritt. Allerdings ist fraglich, ob es sinnvoll ist, die Tests hier mit dem möglicherweise defekten Schwimmerschalter zu machen. Du hast ihn durchgemessen? Was hast du gemessen? Durchgang? Spannung? Widerstand?
    Ich hab letztes Jahr an einer Maschine 3 Tage einen Fehler gesucht. Spannung war da, brach aber hinter der Spule eines Schützes, also unter Last, ein. Bis zu diesem Schütz war alles ok. Spannung war da, die Signale waren schlüssig. Der Verdacht viel auf den alten Trafo, der die 24 Volt liefert und die Gleichrichterschaltung dahinter. Am Ende stellte sich heraus, dass es ein Not-Halt-Schalter war, der einen hohen Übergangswiderstand hatte. Ohne Last sah alles ok aus, unter Last brach der Strom über den Schalter zusammen und aus wars. Vielleicht hast du ein ähnliches Problem. Da nützt dir die Messung der Spannung am Schalter dann wenig. Teste deine Schaltung mal mit einem Stück Draht anstelle des Schalters - wenn sie dann funktioniert, liegt es am Schalter, funktioniert sie nicht, kannst du den Schalter wahrscheinlich ausschließen. Zur Bestätigung Widerstand und Strom von Schalter und Draht vergleichen. Der Widerstand sollte nahe null sein. Den Strom stellst du mal dem rechnerischen Wert gegenüber. Dann solltest du ein klareres Fehlerbild haben.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • GPIOs an 5V anschließen ist nicht so die beste Lösung.

    Schrieb er das? :-/ Nö, er schrieb von einem 5V Netzteil und nicht von an 5V anschließen. Die Fehler- und Situationsbeschreibung ist wirklich ziemlich dürftig, aber das ist noch lange kein Grund hier sich so über andere User auszukotzen, die auch nur raten können.

    Also halt mal ein bisschen den Ball flach von wegen "hanebüchend" usw.!

  • Aber wenn du es besser weißt, dann erklär mir doch, was genau dieser Satz heißen soll:

    Schließe ich den PIN der auf GND gehen sollte an das zweite 5V Netzteil an was ich dort auch noch verbaut habe dann schaltet der PIN 0 auf high.

    Der Pin, der auf GND gehen soll, ist doch GPIO0 und an ein 5-V-netzteil anschließen heißt doch wohl, an dei 5 V anschließen... Was will er denn sonst von einem 5-V-Netzteil an einen GPIO anschließen? 3,3 V? Oder 230 V? oder GND? Oder vielleicht Brauchwasser?

    Außerdem habe ich nicht gesagt, dass er das tut, sondern nur, dass das keine gute Idee ist, (falls er es tut).

    Und hanebüchen sind "müde" Netzteile und "Wunder wirkende" (aber bezüglich der vom Fragesteller vogegebenen Schaltung falsch angeschlossene) Widerstände allemale.

    Aber gut, dass du mal wieder um dich treten konntest - Sport soll ja gesund sein.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo 4Zap

    Wenn Du den Schwimmerschalter vom GPIO nach Masse schalten lässt, solltest Du den inneren Pull-Up-Widerstand des GPIOs einschalten.

    Falls der eingeschaltet ist, solltest Du bei geöffnetem Schwimmerschalte eine Spannung von etwa 3,3 Volt am GPIO gegen Masse messen können.

    Den inneren Pull-Up-Widerstand kannst Du mit einem Multimeter messen, wenn Du die Messspitzen an die 3,3V an Pin 1 und an den jeweiligen GPIO hälst.

    Der Widerstand hat einen Wert von ca. 50kΩ. Zudem muss auch sichergestellt sein, dass nicht geichzeitig der Pull-Down-Widerstand eingeschaltet ist.

    In dem Fall würdest Du nur etwa 1,6 Volt am GPIO gegen Masse messen. Außerdem solltest Du natürlich sicherstellen, das der gewählte GPIO nicht durch das Betriebssystem schon belegt ist ! Leider kann man die Einstellung der Widerstände nicht per Software zurück lesen.

    Gruß

    Prittzl

  • Aber wenn du es besser weißt, dann erklär mir doch, was genau dieser Satz heißen soll

    Ich weiß es nicht besser, woher denn auch, aber

    oder GND?

    wäre in dem Zusammenhang (wenn der "Pin auf GND gehen sollte") wohl naheliegender als 5V oder?

    Du kennst das "Mysterium" offenbar nicht, wenn Netzteile altern oder müde werden, wie ich es nannte!?

    Wenn

    Läuft seit Jahren problemlos.

    und nun nicht mehr, dann ist das Netzteil auch eine mögliche Fehlerquelle, die man in Betracht ziehen muss.

    Aber gut, dass du mal wieder um dich treten konntest - Sport soll ja gesund sein.

    :bussi2:

  • Es gibt hier fünf unmittelbar maßgebliche Komponenten: Einen Schalter, einen Eingang, ein Programm, einen Ausgang und ein Relaismodul. Es kann doch nicht so schwer sein, festzustellen, welche dieser 5 Komponenten den Fehler verursacht...

    Immerhin, die Betrachtung des Eingangssignals mit dem Terminalprogramm ist ja schon mal grundsätzlich ein richtiger Schritt. Allerdings ist fraglich, ob es sinnvoll ist, die Tests hier mit dem möglicherweise defekten Schwimmerschalter zu machen. Du hast ihn durchgemessen? Was hast du gemessen? Durchgang? Spannung? Widerstand?

    Genau, logische Fehlersuche ist mir durchaus bekannt.

    1. Schalter - getestet und durchgemessen - schaltet zuverlässig, prellt nicht. Widerstandsmessung, schaltet genau auf 0 Ohm, ersetze ich den Schalter gegen ein einfaches Jumperkabel und schließe GPIO 0 gegen GND (also praktisch dauerhaft geschlossener SChalter) geht PIN 0 auf 1 und fällt sofort wieder auf 0 wie beim Schwimmerschalter. Gleiches Ergebnis..

    2. Eingang - Hier muss der Fehler liegen - der GPIO schaltet auf 1 wenn der Schwimmerschalter schaltet, fällt aber sofort wieder auf 0

    3. Programm - Bash skript (siehe oben) funktionierte jahrelang ohne Probleme

    4. Relaismodul - schaltet zuverlässig, GPIO 0 auf high - Relais schaltet zuverlässig ein, GPIO 0 auf low, Relais schaltet sich aus.

    5. Netzteile: In dieser Schaltung sind drei Netzteile verbaut. Zwei 5V, ein 12V für die Pumpen und Schrittmotoren.

    Aber wenn du es besser weißt, dann erklär mir doch, was genau dieser Satz heißen soll:

    Der Pin, der auf GND gehen soll, ist doch GPIO0 und an ein 5-V-netzteil anschließen heißt doch wohl, an dei 5 V anschließen... Was will er denn sonst von einem 5-V-Netzteil an einen GPIO anschließen? 3,3 V? Oder 230 V? oder GND? Oder vielleicht Brauchwasser?

    Ähhh.Masse ist Masse.... Dem GPIO0 ist es egal welche Masse, merkwürdigerweise ist es tatsächlich so das wenn ich den Schalter an GPIO 0 an den GND vom Pi anschließe geht GPIO 0 beim schalten nicht auf 1. Es passiert nichts. Schließe ich GPIO 0 gegen GND des zweiten Netzteils an, reagiert er.

    Leider hab ich es gestern nicht merh geschafft einen 10K Widerstand zu testen, mach ich gegen mittag heute und werde dann berichten.


    Bislang hab ich Netzteile getauscht, Relaiskarte getauscht, Pi getauscht. Evtl. geh ich mal auf einen anderen GPIO pin noch...

    Einen Pi 2 B hab ich noch hier rumliegen. Wenn das mit dem 10K Widerstand nichts bringt werd ich nochmal den Pi tauschen. ICh müsste noch irgendwo einen rumliegen haben.... muss mal suchen, vielleicht sind beide Pi's intern gestoert... die sind schon älter, aber das beide die gleiche Macke haben halte ich für unwahrscheinlich.

    Alles anders an dem Pi läuft sauber. Der hat ein paar Aufgaben und die arbeitet er sauber ab. D

  • Der Pullup ist in der boot/config verewigt. Die Spannungsmessungen kamen mir auch schon in den Sinn, jedoch ist das Ding so arg verkabelt und meine Augen so schlecht das ich mir ein paar Jumperkabel erst umloeten muss um diese dann als Messspitze zu verwenden. Mit dem Multimetermesspitzen trau ich mich nicht an die GPIOs, da bau ich doch Kurzschlüsse zwischen den Pins beim Messen. Danke für deine Messwerte, ich vergleich das später mal. Das koennte helfen.

  • Update:

    ich hab mir mal Jumperkabel an die Messspitzen gebastelt und diverse Messungen veranstaltet. Mein Verdacht, entweder flatterfaften GPIO 0 Port oder Fehler in Masse GND Verbindungen.

    GPIO 0 - GND = 0V (!) (alle verfügbaren 0V Pins an der GPIO Leiste durchprobiert, nichts passiert)

    GPIO 0 - GND(anderes Netzteil) = 0 - 0,8V (Relais schaltet, fällt sofort wieder ab, also wie gehabt fehlerhaft, das ist zu wenig Spannung!)

    Masseverbindung aller verfügbarer GPIO Pins untereinander auf Verbindung gemessen = alle GND Pins sind sauber mit Masse verbunden

    Masseverbindungen zu Relaisboard, Temp und Ultraschallsensoren vermessen = alles ok, alles sauber

    Pin1 3,3V gegen alle verfügbaren Masse Pins gemessen = saubere 3,3V....

    Ein autarkes Spannungsmessgerät am 5V Eingang am Pi angeschlossen zur Überwachung = zeigt permanent zwischen 5.13V und 5.14V an, keine Änderung wenn sich irgendein Zustand am Pi ändert. Sieht stabil aus.

    Schwimmerschalter wieder angeschlossen an GPIO 0. und .... FUNKTIONIERT!


    Ich habe nichts geändert an der Schaltung, alles ist wie bisher. Jetzt funktioniert der Schwimmerschalter wieder.

    Meiner Logik nach habe ich alle Komponenten in Reihenfolge getauscht (Pi 2mal, Netzteil 2mal usw.)..... es erschließt sich mir jetzt nicht wieso es auftrat. Alles gemessen und bis auf die fehlende Spannung an GPIO 0 fällt mir da nichts weiter auf. Wieso ist jetzt nach den Messungen wieder alles wie es mal war?

    Ich würd ja sagen ich hab wahrscheinlich mal den GPIO 0 von dem Pi gegrillt, aber auch nach einem Tausch trat der Fehler ja nach wie vor auf.

    Jetzt werd ich den ganzen Krempel nochmal durchmessen und schauen was anders ist. Bis gleich.....

  • Die Freude währte nur sehr kurz. :( Das ging nach 5 Minuten wieder in diesen undefinierbaren Zustand. Jegliche Peripherie war noch getrennt, nur der Schwimmerschalter am Pi angeschlossen und das Relaisboard.

    In meiner Platinenkiste hab ich noch eine fertige Tasterschaltung aus früheren Tagen gefunden, das war mal auf einem Boot verbaut. Hurra. Etwas verstaubt aber egal... damit kann ich dann noch zusätzlich die Pumpe schalten ohne Bash Befehl und ssh Verbindung einfach per Tastendruck. Hat auch was...

    Schnell noch zwei Pins für den Schwimmerschalter parallel zum Taster rangeloetet und angeschlossen. 3,3V mit drauf und jetzt läufts sauber.....erstmal.

    Also lass ich das so jetzt mal stehen.

    Nach und nach werd ich die Peripherie anklemmen und schauen ob sich was ändert. Es wundert mich nur das die Schaltung lange keine Probleme machte und es jetzt damit anfing. Die Methode über den 10K widerstand scheint mir doch fast verpflichtend zu sein damit das zuverlässig läuft. Komisch, aber egal.

    Also für alle die damit Ärger haben, nehmt direkt die Methode über den 10K Widerstand mit 3.3V Abgriff.

    Danke an Alle für den "seelischen" Beistand :)

  • Ähhh.Masse ist Masse.... Dem GPIO0 ist es egal welche Masse, merkwürdigerweise ist es tatsächlich so das wenn ich den Schalter an GPIO 0 an den GND vom Pi anschließe geht GPIO 0 beim schalten nicht auf 1. Es passiert nichts. Schließe ich GPIO 0 gegen GND des zweiten Netzteils an, reagiert er.

    [...]

    Bislang hab ich Netzteile getauscht, Relaiskarte getauscht, Pi getauscht. Evtl. geh ich mal auf einen anderen GPIO pin noch...

    Masse ist Masse gilt aber nur, wenn du die beiden Massen miteinander verbunden hast. Sonst hast du möglicherweise erstens ein anderes Potenzial und zweitens keinen geschlossenen Stromkreis.
    Am Schalter kann es dann wohl kaum liegen. Und dein Terminalprogramm zeigt, dass der Eingang sich komisch verhält. Programm und Ausgang fallen also auch weg. Bleibt also eigentlich nur eine Macke am Eingang des Pi. Bist du sicher, dass nichts an der Pullup-Konfiguration geändert ist? Vielleicht durch ein Update oder so?

    Also, ich würde mal mit dem Pullup rumprobieren und vielleicht testest du wirklich einfach mal einen anderen Pin. Kann ja sein, dass durch langjähriges Schalten irgendwas in der Eingangsbeschaltung des GPIO0 gelitten hat.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • 4zap

    Was für eine Art Relais schließt Du denn da an den GPIO0 an, und wann und von wo nach wo misst Du 0,8 Volt?

    Das ist eins dieser übliche China Relaisboards, hier ein 2fach. Die sind mit 5V versorgt über GPIO out steuere ich die Schalterei. Die sind zuverlässiger als ich am Anfang dachte. Die machten noch nie Ärger.

    Die 0,8V mess ich von GPIO 0 aus Richtung GND wenn der GPIO auf 1 geschaltet hat, fällt dann auf 0V ab.

    Es läuft jetzt, die 3,3V über den 10K Widerstand am Schwimmerschalter sind die Loesung. Werd sowas gar nicht mehr ohne realisieren in Zukunft.

    Vielleicht durch ein Update oder so?

    Hatte ich auch schon überlegt aber ich hab keinerlei Updates gefahren. Never change a running system....

Jetzt mitmachen!

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