Raspberry 3 mit Run / Stop Anzeige ausstatten

  • Hallo zusammen,


    ich möchte meinen Raspberry gern mit einer Run / Stop Anzeige ausstatten, wie sie an einer SPS üblich ist.

    Also eine bicolor LED, rot Pi läuft nicht, grün Pi läuft und alles ist i.O.

    Dazu möchte ich in der Anwendung einen GPIO Pin ständig zwischen Low und High hin und her kippen.

    Die vorzugsweise diskrete Schaltung am GPIO Pin soll die Flanken "erkennen" und die grüne LED anschalten.

    "Hängt" mein Programm ( oder der ganze Pi hat sich aufgehängt ) bleiben die Flanken aus und die LED wechselt auf rot.


    Leider habe ich das Richtige in den weiten des Netzes noch nicht gefunden...

    Unter dem Begriff "Watchdog" findet man jede Menge Schaltungen, die einen mehr oder weniger langen und mehr oder weniger häufigen Impuls erwarten...

    Alle Schaltungen scheinen nicht zu "bemerken", wenn der eigentliche Impuls auf High hängen bleibt...

    Ist also keine Lösung für mich.


    Hat jemand eine Idee, wonach ich suchen muss?

    Oder gibt es so etwas fertig und ich muss an der richtigen Stelle nur zugreifen?


    Ich freue mich auf alle Euere Hinweise!

    Grüße

    Tom

  • Du bräuchtest eine kleine Schaltung, die in regelmäßigen Abständen einen Kondensator auflädt, der dann für eine gewisse Zeit die grüne LED speist, bis er wieder aufgefrischt wird. Die Auffrischung muss in deinem laufenden Programm in den nötigen Abständen erfolgen, bevor der Kondensator leer ist. 1000 µF genügen bei 5 mA LED-Strom für eine Sekunde. Hinter der LED-Schaltung muss eine weitere Schaltung sein, die die rote LED anschaltet, wenn der Kondensator leer ist. Ich hab jetzt gerade keine konkrete Schaltung im Kopf. Mit zwei Transistoren (ein NPN und ein PNP) müsste es aber gehen. Ganz grob: Impuls vom Pi lädt über einen NPN den Kondensator, der speist die LED. Die Kondensatorspannung hält den PNP gesperrt. Unterbleibt der Impuls, weil dein Programm hängt, entlädt sich der Kondensator auf null. Der PNP schaltet durch, die rote LED leuchtet.

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

  • Zeige mal Dein Programm! Evtl. hat dann meine/die Spekulation ein Ende.

    Hallo zusammen und Danke für die schnelle Reaktion!


    hyle: mein Programm ist eine Dauerschleife.


    Am Ende, bevor die Schleife neu startet wird geschaut ob der GPIO "0" ist, dann wird er auf "1" gesetzt, sonst auf "0"

    Er steht also in jedem geraden Schleifendurchlauf auf "0", in jedem ungeraden auf "1".


    gnome: Danke für den Ansatz, aber was passiert, wenn der GPIO auf "1" gesetzt wurde, den Kondensator also auflädt, und sich mein Pi dann verabschiedet?!

    Dafür fehlt mir noch die zündende Idee...


    Grüße Tom

  • Du setzt ihn in jeder Schleife kurz auf 1, wartest eine halbe ms und setzt ihn dann gleich wieder auf null - das genügt, um den Kondensator zu laden. Innerhalb dieser drei Programmbefehle wird der Pi hoffentlich nicht abstürzen. Aber selbst dafür gäbe es eine Lösung.

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

  • Ich habe auch schon das gefunden:




    Leider habe ich keine wirkliche Ahnung, wie das funktioniert, aber das "Laden" des Kondensators erfolgt wohl nur mit der positiven Flanke des Signals...


    Aber wozu sind die Dioden da? Von der Dimensionierung der Bauteile mal ganz zu schweigen...

  • Ein retriggerbares Monoflop. Es ist in den Datenblättern nicht klar erkennbar - aber so ein Monoflop sollte nach der (mit einem RC-Glied) eingestellten Haltezeit auf low fallen, auch dann, wenn das Triggersignal versehentlich auf HIGH bleibt. Regelmäßige Triggerimpulse halten den Ausgang auf high. Bleibt das Eingangssignal aber länger auf high oder auf low, fällt der Ausgang auf low.

    Diese Monoflops gibt es als IC für wenige Cent. Es sind meist zwei Monoflops auf einem IC. Jeder hat zwei Ausgänge Q und Q'. An Q kommt die grüne LED, an Q' die rote. fertig.

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

  • Der erste Kondensator und die erste Diode leuchten mir nicht ein. Der zweite Kondensator wird durch den Puls geladen. Die Diode ist da, damit die Ladung nicht bei LOW zurück in den Pi fließt. Beim Laden des Kondensators wird so aber der Pi-Ausgang kurzzeitig überlastet - ich bin nicht sicher, ob das nicht langfristig schadet.


    Ich würds anders machen. Den Impuls vom Pi über einen Widerstand (1000 Ohm) auf einen Transistor geben. Mit diesem 5V des Pi an den Kondensator schalten. Diode braucht man dann nicht mehr. Vor den Transistor würd ich noch einen 25-50 Ohm Widerstand machen, damit der Strom hier in Grenzen bleibt (100-200 mA). Vom Kondensator dann mit einem 5K Widerstand auf den Transistor, der die LED steuert. Vor die LED gehört natürlich noch ein Widerstand (300 Ohm).

    Der Puls muss dann mindestens 10 ms (bei 25 Ohm 5 ms) sein, damit der Kondensator richtig aufgeladen wird. Die LED leuchtet dann für 1 Sec.

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

  • Hallo tom_2,


    Das geht alles viel viel einfacher.


    Hänge eine LED (rot oder grün oder gelb) mit einem ca. 680 Ohm-Widerstand an den GPIO14. Dann hast Du folgende Features:

    - LED aus: RPi ist nicht an eine Spamnnungversorgung angeschlossen

    - LED blinkt: Raspberry Pi fährt hoch

    - LED leuchtet: Raspberry Pi läuft

    - LED glimmt: Raspberry Pi ist heruntergefahren, hängt aber noch an der Spannungsversorgung


    Mit einer DUO-LED (z.B. rot / grün) kannst Du per Autostart aktiv noch die zweite Farbe einstreuen...



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Dann weiß er aber immer noch nicht, ob sein Programm noch läuft, sondern nur, ob der Pi noch läuft...

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

  • Moin, die Lösung hat ein wenig gedauert, aber so funktioniert alles wie gewünscht.

    Im Grundzustand ist der erste Transistor gesperrt und der zweite Transistor leitend.

    Die Zwei-Farb-LED ist so herum eingebaut, dass sie jetzt rot leuchtet.

    Bei der L-H-Flanke am GPIO ist C1 entladen und praktisch ein Kurzschluss.

    Über die Diode wird C2 aufgeladen.

    Das lässt den ersten Transistor kurz leitend werden und sperrt den zweiten Transistor.

    Die Zwei-Farb-LED wechselt kurz auf grün.

    C1wird aber jetzt vom GPIO über R1 aufgeladen.

    Die Spannung vor der Diode fällt wieder auf GND.

    C2 entlädt sich über den ersten Transistor.

    Die Schaltung "kippt" zurück und die LED wird wieder rot.

    Der GPIO muss jetzt wieder auf low, um C1 über R1 wieder zu entladen.

    Dann beginnt es wieder von vorn.

    Bleibt der GPIO auf low oder high "hängen", bleibt die LED rot.

    Bash
    #!/bin/bash
    gpio -1 mode 7 out
    while :
    do
        gpio -1 write 7 1
        sleep 0.01
        gpio -1 write 7 0 
        sleep 0.01
    done