Ungenaue Daten

  • Hi!
    Ich habe zwei Buttons an Port 25 und 7 angeschlossen, bekomme aber keine gescheiten Ergebnisse raus. Es wechselt mal zwischen 0, mal zwischen 1, ob der Button gedrückt ist oder nicht, das ist egal.
    Der Button ist übrigens mehr ein Kippschalter. Woran kann das liegen?

    Salz

  • Hi,

    bevor das hier in Verwirrung ausartet, sollten wir uns mal über die Pin-Bezeichnung einigen.
    Du würfelst nämlich schon wunderbar Pin-Nummer und GPIO-Namen durcheinander ;) ...

    Also, ich schlag mal vor, wir reden von physikalischen Pin-Nummern. dann hast Du jetzt einen Button zwischen Pin #25 und Pin #26 geschaltet. Was erwartest Du jetzt?
    Das, was passiert ist, dass Pin #26 auf LOW geht, wenn der Kontakt geschlossen ist, und in einen undefinierten Status geht, wenn der Kontakt offen ist.

    cu,
    -ds-

  • Und wie soll ich ihn dann einlesen?
    Muss ich dann doch irgendwie einen der "besonderen" 3V3 und/oder 5V Pins rein quetschen?
    Vor Allem dann auch wo? (Leider konnte ich bei Fritzing nichts Vergleichbares finden, aber naja.) Ließe sich das darauf übertragen?
    Der Button hat einen Input und zwei Ouputs. An sich splittet er den Stromkreis zu 2, wobei einer der beiden eben je nach Zustand ungenutzt ist.

    Salz

    Einmal editiert, zuletzt von DasNaCl (9. Januar 2014 um 23:25)

  • Hi, meiner einer noch mal ...

    im Regelfall wird man den GPIO-Pin, den man schalten möchte, mit einem passenden Widerstand auf 3.3V oder GND gelegt.
    Damit hast Du einen definierten Pegel (irgendwie hat es sich eingebürgert, den Pin auf HIGH - also mit 3.3V "vorzubelegen". Ob das eine Rolle spielt, kann ich aber nicht sagen).
    Der Schalter schaltet nun den Gegenpol (also Pin #26 liegt über Widerstand auf 3.3V - dann ist der Schalter mit GND Pin #25 verbunden).
    Ist der Kontakt hergestellt, wird der Pin auf LOW gezogen, trennt man den Kontakt, ist der Pin wieder HIGH.

    Such mal nach "Taster GPIO" in der Forensuche ... da gibts mittlerweile etliche Beiträge dazu.

    cheers,
    -ds-

  • Ich verstehs nicht... Er liegt doch auf GND und die andere Variante mit dem 3V3 verkompliziert das Ganze doch. :s
    Die Beiträge, die ich mir ansah, die die Thematik behandeln sollen, helfen auch nicht wirklich, ich verstehs einfach nicht. Hardware ist eben doch sehr viel komplexer als Software. :(
    Um den Widerstand gehts hier weniger als viel mehr um das Verbinden mit den Ports.
    Welche Rolle spielt denn der 3V3-Pin? Was macht ihn besonders?
    Warum muss er überhaupt in der Schaltung drin sein? Ist er dann "verbraucht" oder kann man ihn weiterverwenden für weitere Buttons? Einfach drauflos-verbinden will ich aus Angst nun auch nicht wirklich.

    Salz

  • Müssen es diese beiden GPIO Pins sein? Du verwendest mit Pin 26 einen für SPI vorgesehenen. Vielleicht besser einen der komplett freien Pins nehmen. Ich verwende für meine Interrupt-Steuerung Pin 23 und Pin 6 (Ground). Das funktioniert einwandfrei, wenn du Pin 23 als HIGH setzt und dann dort auf ein LOW wartest, was passieren sollte wenn du den Button drückst.
    Ich weiß leider nicht, ob der PIN 26 auf eine andere Art programmiert werden muss, da SPI, aber eine simple interrupt Abfrage sind 4 Zeilen Code...

    Einmal editiert, zuletzt von BallerNacken (10. Januar 2014 um 00:28)

  • Klar geh ich auf 'nen anderen Port, am Ergebnis änderts nichts, aber wenn ich mir dadurch irgendwas total töftes freihalte, klar. Hab den betreffenden Button nun von Pin 26 auf Pin 18 umgesteckt, der andere war ja auf einem normalem.

    Salz

  • Also von der Programmierung her ist es zunächst mal vollkommen egal, welchen GPIO Pin man verwendet.
    Ausreisser sind allerdings die Rx und Tx Pins der seriellen Schnittstelle (Pin #8 und Pin #10).
    Die werden per default vom System als serielle Konsole verwendet welche vorher deaktiviert werden muss.
    Wie von meinem Vorredner richtig erkannt, würde ich auch erst auf die "freien" Pins zugreifen.

    Und was es mit den 3,3V auf sich hat, so sollte das aus meinem vorigen Post hervorgehen.
    Oder sehe ich das falsch?

    ciao,
    -ds-

  • Also ich kann schon irgendwie folgen, aber das Gefühl von Verständnis habe ich noch nicht. Also ich weiß noch nicht so recht, wie ich das Ganze dann zusammenknallen kann. Programmieren ist da eindeutig einfacher.:s
    Naja.
    Ich hab mal was absolut nicht konform mit irgendeiner Norm aufgemalt:
    unbenannt5gi1h.png
    Ginge das denn? Mein Bauch sagt nein, mein Kopf sagt nein, aber was anderes bekomme ich auch nicht zusammen.

    Salz

    Einmal editiert, zuletzt von DasNaCl (10. Januar 2014 um 01:19)

  • Hm...also ich verstehe noch nicht ganz, was du eigentlich machen willst. :D Du hast einen Kippschalter mit dem du was machen willst? Einfach nur an einem Pin überprüfen ob ein Statuswechsel eintritt, wenn du den Schalter betätigst? Und im Moment bekommst du egal ob du den Schalter bewegst ständig schwankende Ausgaben?

  • okay, aber was sollen die Buttons machen? Was erwartest du für eine Ausgabe?
    Wenn du einen einzelnen Button oder Kippschalter so wie im Anhang an den Pi anschließt, den Pin 23 per Software auf HIGH stellst und dann den Button drückst oder den Schalter umlegst, wird er auf LOW gehen und dir deine wie auch immer geartete Ausgabe ausgeben. Dafür wird keine extra Verbindung zu einem der 3,3V Anschlüsse benötigt...

  • Ok, eine kleine Korrektur zur Schaltung meines Vorredners (Du kannst den Pin imho nicht als sowohl IN als auch OUT definieren ... entweder oder - deshalb ist es meines Wissens entweder ein HIGH setzen per SW oder das Auslesen nicht möglich).

    Hier ist mal ein älterer Post von orb, der das evtl. eingängiger erklärt.
    Im Anhang mal ein Vorschlag meinerseits. Ich hoffe, das trifft das, was Du vor hast.
    Widerstände mal nachrechnen (URI) und vor dem Anschluss des RPi mal ausmessen. Der Strom sollte 2 bis 6 mA nicht übersteigen.


    // EDIT:
    Falls es Dich interessiert:
    Das tool, mit dem ich den Schaltplan gezeichnet habe, heisst Fritzing und das kannst Du hier kostenlos downloaden.
    Ein anderes, das ich auch ab und zu verwende, ist eagle, das es hier kostenlos gibt.
    Fritzing ist allerdings m.E. einfacher zu handhaben und erzeugt Grafiken, die einfach umsetzbar sind.

    cheers,
    -ds-

  • Genau so ist ja gerade das Setup.
    Beim Abfragen (direction:in) gibts eben nur feucht fröhlich durcheinander gewürfelte Werte. Mal true, mal false.
    Ich erwarte einfach nur die Ausgabe, dass beim Drücken entweder eindeutig true oder eindeutig false auslesbar ist, (mal das Entprellen beiseite geschoben, angenommen das passiert irgendwo) so dann auch beim Nichtdrücken.

    Edit: Super! Also ist es wirklich so, wie ich es schlecht in paint hingekrickelt habe. Danke!
    Ich markiere das Thema als erledigt, sobald ichs ausprobiert habe.

    Salz

    Einmal editiert, zuletzt von DasNaCl (10. Januar 2014 um 02:10)

  • DasNaCl:
    Was Du offenbar bisher nicht verstanden hast:
    Wenn Du einen GPIO zum Lesen auf Input schaltest, ist die Spannung dort undefiniert, d.h. sie kann an der Schwelle zwischen low und high schwanken. Das ist grundsätzlich in der Digitaltechnik so, deshalb musst Du mit einem Widerstand klare Verhältnisse schaffen.

    Mit 10K vom GPIO auf 3,3V ist es ein sog. Pullup Widerstand oder mit 10K vom GPIO auf Masse ein Pulldown Widerstand. Entweder das eine oder das andere, wie Du es machen möchtest, bleibt Dir überlassen.
    Dadurch schaffst Du jedenfalls klare Verhältnisse.

    Kannst ja (ohne zunächst etwas anderes wie z.B. Schalter anzuschliessen) mal beide Varianten ausprobieren.

    Gruß, mmi

Jetzt mitmachen!

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