Raspberry Pi GPIO Input Pins liefern zufällige Werte


12

Ich habe in letzter Zeit viel mit dem Raspberry Pi gespielt. Aber ich habe ein Problem.

Wenn ich einen Eingangs-Pin einrichte, um zu überprüfen, ob Strom an ihn gesendet wird oder nicht, er gibt mir ziemlich instabile Antworten.

Einige Beobachtungen, die ich gemacht habe, um mein Problem zu klären:

  1. Wenn ich die Schaltung anschließe und Strom an den Eingangsanschluss fließt, ist der Wert, den ich erhalte, durchgehend WAHR oder 1.

  2. Wenn ich den Stromkreis unterbreche, indem ich eine LED entferne, die ein Teil davon ist (wenn der Eingangswert 0 sein sollte), erhalte ich zufällige Werte, die zwischen 0 und 1 wechseln.

  3. Wenn ich alle Kabel von meinem Pi entferne, erhalte ich den konsistenten Wert 0

  4. Wenn ich alle GPIO-Kabel entfernt habe, gibt es mir den Wert 0, aber wenn ich einfach den Eingangsstift mit einem Stück stromführendem Metall berühre (was am anderen Ende zu nichts führt), beginnt es wieder mit den Zufallswerten. Es gibt mir keine zufälligen Werte, es sei denn, ich habe auch etwas mit dem Ausgangs-Pin verbunden. Es muss nirgendwo hinführen, es muss nur den Ausgangspin berühren. Und ein anderes Stück Metall muss den Eingangsstift berühren. Überhaupt keine Verbindung zwischen ihnen.

Ich frage mich, warum mir zufällige Werte angezeigt werden, wenn der Eingangs-GPIO-Pin ein Metall berührt.

Und noch interessanter ist, warum gibt es mir konstante Einsen oder WAHREN, wenn ich tatsächlich Elektrizität dorthin schicke?


Bearbeiten Sie zu Anweisung Nummer 4: Es gibt mir keine zufälligen Werte, es sei denn, ich habe etwas mit dem Outputpin verbunden. Es muss nirgendwo hinführen, es muss nur den Ausgangspin berühren. Und ein anderes Stück Metall muss den Eingangsstift berühren. Keine Verbindung zwischen ihnen
Gustaf

Willkommen bei Raspberry Pi Stack Exchange! Sie wissen, dass Sie Ihre Frage bearbeiten können, um diese Informationen zu ändern, anstatt sie zu kommentieren? Kommen Sie auch von Zeit zu Zeit in den Chat. Wir lieben immer neue Unternehmen und es wird zeigen, dass diese Seite nützlich ist, wächst und eine involvierte Nutzerbasis hat. Vielen Dank!
RPiAwesomeness

1
Dies liegt daran, dass die Stifte schweben. Weitere Informationen unter electronics.stackexchange.com/a/35705
Gerben

Antworten:


14

Das Problem

Wenn ich die Schaltung anschließe und Strom an den Eingangsanschluss fließt, ist der Wert, den ich erhalte, durchgehend WAHR oder 1.

Stimmt, aber was passiert, wenn Masse mit dem GPIO-Eingangspin verbunden ist? Der Wert, den es geben würde, wäre immer falsch .

  • Wenn Strom an den Eingangspin angeschlossen ist: Der Eingangspin erkennt eine 1 (wahr).
  • Wenn Masse mit dem Eingangspin verbunden ist: Der Eingangspin erkennt eine 0 (falsch).
  • Wenn nichts mit dem Eingangspin verbunden ist: Der Eingangspin wird verwirrt.

Wenn nichts angeschlossen ist, befindet sich der Pin in einem "schwebenden" Zustand und der Ausgang ist nicht vorhersehbar. es ist in einem undefinierten Zustand, es ist weder 0 noch 1, und der erkannte Wert kann sich merkwürdig ändern, daher Ihre zufälligen Ergebnisse. In der Elektronik ist dies als dritter Zustand bekannt .

Einige Details von a Wikipedia-Artikel :

In digitalen Schaltungen wird ein hochohmiger Ausgang (auch als Hi-Z-, Tri-State- oder Floating-Ausgang bezeichnet) von der Ausgangsschaltung nicht auf einen definierten Logikpegel getrieben. Das Signal wird weder auf einen logisch hohen noch auf einen niedrigen Pegel getrieben; Diese dritte Bedingung führt zur Beschreibung "dreifach angegeben". Ein solches Signal kann als offener Stromkreis (oder "potentialfreier" Draht) angesehen werden.

Die allgemeine Lösung

Die Lösung ist ein Pulldown-Widerstand . Stellen Sie sich dies als eine zusätzliche Komponente vor, die nichts tut, wenn die Leitung eine 0 oder 1 erhält. Wenn die Leitung jedoch frei ist, tritt sie plötzlich in Aktion und gibt eine 0 aus.

Die Himbeer-Pi-Lösung

Glücklicherweise hat der Rpi ein eingebautes Pulldown-Menü, das Sie programmgesteuert aktivieren müssen. Hier ist ein Python-Skript dafür:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
//Now your input is stable.

Randnotiz

Schließen Sie die Stromversorgung nicht direkt an den Stift an, da dies gefährlich wäre! Stellen Sie sicher, dass im Stromkreis genügend Widerstand vorhanden ist. Schließen Sie außerdem niemals die 5-V-Stromversorgung direkt an den GPIO an, da dieser nur 3,3 V akzeptiert.


Kennen Sie den entsprechenden C # -Code, wenn Sie auf einer Windows 10 IoT-Kernplattform ausgeführt werden?
Vijay Chavda

Diese Antwort ist golden! Thx
domih
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.