Hoch- und runterfahren mittels Taster (incl. Status-LED)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Darf ich bei dem Tutorial noch um etwas mehr Erklärungen bitten?
    Wir haben 2 Kreise, die mittels Taster geschlossen werden ...

    Pin1 liefert 3,3V. Was passiert nun, wenn ich keinen Widerstand zwischen Pin1 und Pin5 setze?
    Kurzschluss nehme ich an und Ende vom Raspberry, richtig? (I = U/R) -> Verdammt hoher Strom, knallt mir durch?!

    Also sorgt der Widerstand dafür, dass permanent zwischen Pin1 und Pin5 ein Strom fließt, bei 3,3V, 10kOhm also 0,00033A oder eben 0,33mA (was aber für uns nicht von Interesse ist..)
    Also liegt bei Pin 5 eine Spannung von 3,3V an und somit ist er auf High...

    Liegt denn nun an Pin7 ebenfalls eine Spannung von 3,3 Volt an? [siehe edit]
    Wenn der Taster nicht geschlossen ist, woher bekommt die LED ihren Strom zum leuchten?! Das raffe ich irgendwie so gar nicht!

    Und vor allem: was passiert wenn ich den Taster drücke und die beiden Stromkreise schließe?! Wieso wird dann Pin5 plötzlich "Low" ...

    Würde mich freuen wenns mir jemand erklären könnte!
    LG Sabcoll

    __________________________________
    [edit -> ah, GPIO.output(7, True) -> True setzt den Pin auf High und somit auf 3,3V -> LED leuchtet, verstanden!!!]

    Einmal editiert, zuletzt von Sabcoll (6. August 2014 um 21:09)

  • Hoch- und runterfahren mittels Taster (incl. Status-LED)? Schau mal ob du hier fündig wirst!

  • Wenn du Pin1 und Pin5 ohne Widerstand verbindest hast du ein dauerhaftes High auf dem GPIO-3. Der 10k ist dafür vollkommen uninteressant, weil der Eingang vom Microcontroller eh hochohmig ist. Wenn man aber die Schaltung ohne den Widerstand aufbaut hat man spätestens ein Problem wenn man den Taster drückt, denn damit kommt es zum Kurzschluss zwischen VCC und GND. Mit Pullup fließt ein Strom über diesen Widerstand (deine errechneten 0,33mA bzw. knapp 1mW Verlustleistung), und der Eingang vom MC wird auf Low gezogen. Jetzt könnte man natürlich auch ein Fuchs sein und einfach den 10k weg lassen, Schalter zwischen Pin5 und GND und fertig. Würde auch den Eingang auf Low ziehen, und sehr wahrscheinlich so funktionieren. Allerdings würde der Eingang ohne Tastendruck einen undefinierten Zustand haben, und das gilt es in der E-Technik aus diversen Gründen zu vermeiden. Darum der Pullup Widerstand. Pulldown arbeitet übrigens genau anders herum, Schalter und Widerstand sind vertauscht und der definierte Normalzustand ist Low, bei Tastendruck High.

    Kann man sich eigentlich ganz einfach merken:

    PULL-UP zieht den Pegel im Ruhezustand HOCH
    PULL-DOWN zieht den Pegel im Ruhezustand RUNTER


  • [...]Schaltung ohne den Widerstand aufbaut hat man spätestens ein Problem wenn man den Taster drückt, denn damit kommt es zum Kurzschluss zwischen VCC und GND. Mit Pullup fließt ein Strom über diesen Widerstand (deine errechneten 0,33mA bzw. knapp 1mW Verlustleistung)[...]

    Natürlich. Dummheit tut manchmal weh, alles klar... danke schonmal an dieser Stelle.


    [...]weil der Eingang vom Microcontroller eh hochohmig ist.

    Ah, jetzt macht das für meine Laienkenntnisse auch Sinn. Es fließt Strom von 0,33mA und der Pin5 hat nochmal nen "großen" Widerstand. Damit wird die Spannung auf unter 0,8V (Widerstand also >2,5 Ohm) reduziert und Pin5 wird auf Low gesetzt, weil kein anderer großer Widerstand zwischen Pin1 und GND liegt ...
    oder bin ich hier etwa wieder aufm falschen Dampfer?!

    Diese Überlegungen machen keinen Sinn ... die beiden Widerstände (10kOhm) und der (große) Widerstand vom Eingang (Pin5) sind doch Spannungsteiler.
    Also müsste Pin5 doch permanent Low sein?! (Angenommen dass Pin5 konstanten Strom zieht, was ich nicht weiß).

    Und selbst wenn Pin5 nur wenige mA zieht und die Spannung trotz Knoten bei 3,3V liegt, bleibt Pin5 doch High!?
    Ich raff nicht wieso Pin5 low gesetzt wird ...

    Einmal editiert, zuletzt von Sabcoll (6. August 2014 um 23:04)

  • Tschuldigung, dass ich mich in eure interessante Diskussion drängle. Ich melde mich jetzt erst, weil ich vorher ein anderes Problem mit dem RasPi lösen musste.

    Kernkrank
    Es gibt das Verzeichnis gpiochip0 und die Dateien. Ich weiß nicht, ob das von Bedeutung ist: ich nutze noch weitere GPIOs.
    Ich nutze statt pin7 den pin18 (GPIO24), weil an pin7 der 1wire-Eingang ist.

    Wenn ich den Eintrag in der rc.local weg lasse, Raspi neu starte und dann sudo ./shutdown.py händisch ausführe, kommt diese Meldung:

    Code
    pi@fhem2 ~/skripte/taster $ sudo ./shutdown.py
    ./shutdown.py: 14: ./shutdown.py: import: not found
    ./shutdown.py: 15: ./shutdown.py: import: not found
    ./shutdown.py: 16: ./shutdown.py: import: not found
    ./shutdown.py: 18: ./shutdown.py: Syntax error: word unexpected (expecting ")")


    Das sind diese Zeilen:

    Code
    import RPi.GPIO as GPIO
    import os
    import time
    
    
    GPIO.setmode(GPIO.BCM)


    Füge ich dem Programm am Anfang das ein:

    Python
    #!/usr/bin/python
    # -*- coding: utf-8 -*-


    und mache einen Neustart(!), erhalte ich keine Fehlermeldung und das Programm scheint in der Schleife zu verharren. Ich muss das mit <Strg>-<c> abbrechen.

    Ich glaube zwar nicht, dass das für mein Problem wichtig ist, möchte es aber trotzdem erwähnen:
    - am 3,3V-Pin, wo ich den 9,7Ohm-Widerstand angeschlossen habe, messe ich nur 2,38V;
    - ich habe GND der Diode und GND des Tasters direkt am Taster zusammengelötet, so dass ich nur 3 Kabel zum Taster führen muss. Laut Schaltplan sollte das aber egal sein, oder?

    Viele Grüße
    DocAdams

    1x RaspberryPi 2, 1x RaspberryPi 3, 1x OpenELEC, 1x RaspberryPi 4 mit ioBroker ,

    Einmal editiert, zuletzt von docadams (7. August 2014 um 13:26)


  • Diese Überlegungen machen keinen Sinn ... die beiden Widerstände (10kOhm) und der (große) Widerstand vom Eingang (Pin5) sind doch Spannungsteiler.
    Also müsste Pin5 doch permanent Low sein?! (Angenommen dass Pin5 konstanten Strom zieht, was ich nicht weiß).

    Und selbst wenn Pin5 nur wenige mA zieht und die Spannung trotz Knoten bei 3,3V liegt, bleibt Pin5 doch High!?
    Ich raff nicht wieso Pin5 low gesetzt wird ...

    Schalter nicht betätigt:
    Da der Eingangswiderstand vom GPIO sehr viel höher als der Pull-up ist fällt dort fast die gesamte Spannung ab -> HIGH

    Schalter betätigt:
    Es wird eine direkte Verbindung zwischen dem GPIO Eingang und GND geschaffen -> LOW
    Der Pull-up verhindert einen Kurzschluss zwischen VCC und GND.


    docadams

    1. Hast du mal versucht die Python Pakete neu zu installieren?
    2. Hast du dir mal den Link angeschaut, den ich gepostet habe?
    3. Kalte Lötstellen? Liegen zwischen Pin 1 und 6 3,3V an? Was passiert wenn du Pin 1 und 5 brückst?

  • Vielen herzlichen Dank für das Tutorial.
    Hab alles nachgebaut, gerade getestet und es funktioniert auf Anhieb (bis auf nen falschen GPIO ... anstatt in 5 in 3 gesteckt... die Uhrzeit...)

    Das mit High und Low kann ich jetzt ohne Stress nochmal versuchen zu verstehen :D

  • Sorry für den Doppelpost, aber:

    Nachdem ich ein recht fein laufendes Rasbian Image habe, wollte ich mich nun mal an die anderen Distributionen wagen.
    Raspbmc wollte irgendwie so gar nicht laufen, das war ganz seltsam, also hab ich das frustriert verworfen.

    Dann openelec angesehen und ich bin recht begeistert. Leider fehlen mir die apt-get befehle, was echt nervt.

    Daher würde ich gerne wissen, wie ich dieses wundervolle Skript auch unter Openelec zum laufen kriege?
    Hat da jemand nen Plan von?

    LG

    ======================================================
    edit: nein ist scheinbar nicht möglich, da openelec anders aufgebaut ist.
    Ich werds nochmal mit Raspbmc probieren und schauen ob ichs da zum laufen bekomme!

    LG

    =======================================================
    edit2: Für Raspbmc (raspbmc-2014-06-13.img):

    Falls bei irgendjemandem, auf einer anderen Distribution,

    Code
    sudo apt-get install python-rpi.gpio


    eine Fehlermeldung auswirft

    Zitat

    Unable to locate package python-rpi.gpio
    Couldn't find any package by regex 'python-rpi.gpio'

    so kann man via:

    Code
    sudo apt-get install python-pip
    sudo pip install rpi.gpio

    Das GPIO Paket installieren.
    Der Rest der Anleitung funktioniert dann wunderbar!

    Einmal editiert, zuletzt von Sabcoll (14. August 2014 um 20:17)

  • Hallo ich bin neu hier im Forum da ich mich erst kürzlich mit dem Pi befasst habe wegen Ambi Light dazu hätte ich jetzt noch ein Problem da meine Pins für Ambi schon belegt sind habe ich die Version von swoopo benutzt was aber im Momment nicht geht da in der shutdown.py ein Fehler sein soll ich hab aber noch nicht so die Ahnung was da sein kein und div. Gpio schon von Ambi und LCD Display verwendet werden .
    Hier mal mein Problem.

    Danke schonmal für eure Hilfe.:danke_ATDE:

    Einmal editiert, zuletzt von bambelbee (6. September 2014 um 16:02)

  • Hallo bambelbee,

    zuerst einmal solltest du deinen Text so schreiben, dass andere ihn auch verstehen können. Interpunktion wäre schon mal ein prima Anfang... Auch nach mehrmaligem lesen habe ich noch so recht verstanden, was dein Problem sein soll. Was ist das für ein Script? Hast du das Tutorial im ersten Post mal gelesen?


  • Hallo ich bin neu hier im Forum da ich mich erst kürzlich mit dem Pi befasst habe wegen Ambi Light dazu hätte ich jetzt noch ein Problem da meine Pins für Ambi schon belegt sind habe ich die Version von swoopo benutzt was aber im Momment nicht geht da in der shutdown.py ein Fehler sein soll ich hab aber noch nicht so die Ahnung was da sein kein und div. Gpio schon von Ambi und LCD Display verwendet werden .
    Hier mal mein Problem.

    Danke schonmal für eure Hilfe.:danke_ATDE:

    Dann änder doch einfach die GPIOs. Habe ich auch gemacht wegen 1Wire.

  • Hallo Mathias
    Also das Problem ist das ich alles so gemacht habe wie es in Beitrag 2 beschrieben wurde.

    Taster und alle Widerstände sind dran selbst die shutdown.py Datei habe ich mit dem Notepad++ und auch direkt mit Nano erstellt.

    Es wird auch alles geladen bis zum Fehler GPIOPin = 31 da kommt dann der Fehler.

    Da ich aber die Pins schon fast alle verbraucht habe für Ambilight und LCD Display bleiben mir nicht mehr viele und da der P5 Stecker ja eh nicht dran ist wollte ich dann diese dafür nehmen.

    Hallo Kernkrank
    Sorry für die Schreibweise ich habe sie jetzt mal geändert.

    Hier noch der Link wo ich das dann her hatte.
    Ich hoffe die darf ich hier einstellen. ?

    http://www.gtkdb.de/index_18_2237.html

    http://www.gtkdb.de/index_36_2238.html

    Einmal editiert, zuletzt von bambelbee (6. September 2014 um 23:23)

  • Hallo
    So nach langem Hin und Her geht es jetzt.

    Ich verstehe zwar noch nicht warum ich die shutdown.py in den home/pi/ machen muß aber es geht jetzt sie war vorher in usr/local/bin/ und da wollte sie einfach nicht.

    Obwohl ich die rc.local dementsprechend geändert habe.

    So jetzt geht es an das nächste Projekt.

    Mal sehen was noch so zu testen geht.:thumbs1:

  • Hallo!
    Nach langem Hin-und-her, ob ich meinen Pi doch nutzen oder lieber verschenken soll, habe ich mich endlich für erstere Lösung entschieden und wollte nun die Lösung vom OP nachbauen :)
    Ausschalten funktioniert soweit auch super, nur leider funktioniert es nicht, den Pi über den Schalter auch wieder einzuschalten. Ich hänge einfach mal ein kleines Video an, dass das Problem demonstriert:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Weiß hier jemand vielleicht, warum es nicht so will, wie ich es will?

    p.s.: Momentan läuft auf dem Ding das RetroPie-Image, das auf Raspbian basieren dürfte.

Jetzt mitmachen!

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