Spannung an Gpio Low stabilisieren

  • Hallo,
    ich möchte gern ein Signal meiner Istek Doorline nutzen, um eine Webcam per Script einzuschalten. Hierzu hat die Istek einen Led Ausgang, also Klingel wird betätigt und Led blinkt.
    Nun habe ich den Gpio 25 auf Low geschaltet um das Signal auszuwerten, nur leider schaltet er schon im Ruhezustand hin und her. Ich habe die Spannung nachgemessen und komme auf 0,6 bis 0,85 V, wenn ich das richtig verstanden habe braucht der GPIO Low wohl 0,8 V stabil um nicht permanent umzuschalten.

    Wenn die Klingel betätigt wird, schaltet er synchron zur Led den GPIO ein und aus, das lässt sich per Script nutzen. Hätte jemand eine Idee wie ich im Ruhezustand die Spannung stabilisieren kann ?

    Gruß

    Frank

  • Hallo Frank,

    ohne Schaltung kann man nur spekulieren, was die Ursache darstellen könnte.

    Alles unter 0,8 V ist LOW, alles über 1,3 V ist HIGH.

    Somit ist der Bereich zwischen 0,8 V und 1,3 V nicht definiert.

    Normalerweise zieht man die entsprechende Leitung über einen Widerstand (rund 10 kOhm) nach GND. Bei einem echten Signal wird dann die Spannungsdifferenz (> 1,3V) an einem GPIO erkannt. Durch Einsatz dieses Widerstandes vermeidest Du auch diesen undefinierten Bereich.

    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

    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.

  • ....Nun habe ich den Gpio 25 auf Low geschaltet um das Signal auszuwerten, nur leider schaltet er schon im Ruhezustand hin und her.....

    etwas verworren -> need more input -> Schaltbild

    Ich habe die Spannung nachgemessen und komme auf 0,6 bis 0,85 V,

    klar der GPIO hängt in der Luft und hat kein definiertes Potenzial

    wenn ich das richtig verstanden habe braucht der GPIO Low wohl 0,8 V stabil um nicht permanent umzuschalten.

    ne, er braucht high 3,3V oder low=0V (Grenze für low ist maximal 0,8V was schon unsicher ist was du ja siehst, flattern)

    Abhilfe könnte ein Pullup Widerstand sein 10k-3,3k Ohm von 3,3V nach GPIO oder Pulldown Widerstand 10k-3,3k Ohm von GND nach GPIO

    je nach dem ob du low oder high abfragen willst.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (14. Juni 2014 um 10:58)


  • Ich habe einen kleinen Plan angefügt ist das so gemeint ?

    kann ich nicht sagen, erwartest du low oder high von extern, das ist hier die Frage !

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • GPIO 25 ist Low und somit sollte er erkennen sollen wann die 3,3v von der LED kommen.

    ist er eben nicht, dafür musst du sorgen mit einem pulldown 3,3k-10k Ohm von GPIO 25 nach GND. Wenn dann die 3,3V von der LED kommen erkennst du das.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (14. Juni 2014 um 12:01)


  • Ist das so gemeint ?

    jau :thumbs1:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • ich muss leider nochmal darauf zurückkommen, leider läuft das Ganze nicht wie gedacht. Ich habe jetzt verschiedene Alternativen durch die leider alle nicht sehr erfolgreich sind.

    Das Signal ist wohl zu kurz, damit es vom gpio erkannt wird. Normalerweise hängt dort ja eine Led dran die blinkt. Weiterhin würde ich gern ein Relais nutzen da ich ja verschiedene Spannungsquellen habe ( Ras und Doorline )

    Wie kann ich nun dafür sorgen das eben das Relais länger geöffnet bleibt, bisher tacktet es ca ein mal pro Sek. und das ca. sek lang. Es kann von mir aus weiter tackten jedoch alle 2 oder drei sek. Wie könnte ich so etwas um setzten ?

    Einmal editiert, zuletzt von firstfacility (21. Juni 2014 um 16:08)


  • ....
    Das Signal ist wohl zu kurz, damit es vom gpio erkannt wird. Normalerweise hängt dort ja eine Led dran die blinkt. Weiterhin würde ich gern ein Relais nutzen da ich ja verschiedene Spannungsquellen habe ( Ras und Doorline )
    Wie kann ich nun dafür sorgen das eben das Relais länger geöffnet bleibt, bisher tacktet es ca ein mal pro Sek. und das ca. sek lang. Es kann von mir aus weiter tackten jedoch alle 2 oder drei sek. Wie könnte ich so etwas um setzten ?

    :s es scheint wohl eher an der Software zu klemmen, 1s sollte locker erkannt werden und es liegt an dir wie du diese Info verarbeitest.

    Irgendwie werde ich aus deiner Beschreibung nicht schlau.....:blush:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • ich frage das Ganze mit einer while Schleife ab:

    while :
    do
    klingelan=`sudo cat /sys/class/gpio/gpio25/value` #Pruefung, ob es kligelt
    if [ "$klingelan" = 0 ];
    then #es klingelt
    echo klingelan
    /home/root/canofs.py
    sleep 180
    else
    echo Klingel aus
    fi
    done

    Einmal editiert, zuletzt von firstfacility (21. Juni 2014 um 17:45)

  • ja soweit OK, nur wenn du klingeln erkennst, dann merke dir das doch

    Variable klingel_erkannt
    klingel_erkannt = 1

    und handele dann

    wenn länger keine Klingel mehr erkannt wurde klingel_erkannt = 0

    deine Programmiersprache erkenne ich nicht, deswegen kann die Syntax falsch sein.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (21. Juni 2014 um 17:49)


  • ja soweit OK, ...
    deine Programmiersprache erkenne ich nicht ...


    Nicht ganz,
    der loopt wie blöd und blockiert die CPU ... da müsste noch ein wenig delay in den if Zweig ... aber unter 1 Sek. geht halt nicht.
    Das ist wohl ein bash-/shell-script.
    Imho die denkbar ungünstigste Methode der Signalverarbeitung ... (sogar noch schlechter als Python :fies: ... das musste jetzt sein)

    cu,
    -ds-

  • jep ist ein Shell Script, ich habe einen kleinen Plan angefügt damit klar wird wie es zu Zeit geschaltet ist.

    Wenn ich das Relais manuell schalte auch schneller ( soweit mit einem Taster möglich) wird das Signal eindeutig erkannt.
    Läuft das Ganze über die Doorline höre ich das Relais schalten aber mein Script erkennt keine Veränderung.

    der loopt wie blöd und blockiert die CPU ... da müsste noch ein wenig delay in den if Zweig ... aber unter 1 Sek. geht halt nicht.
    Das ist wohl ein bash-/shell-script.
    Imho die denkbar ungünstigste Methode der Signalverarbeitung ... (sogar noch schlechter als Python :fies: ... das musste jetzt sein)

    sagst du mir denn auch wie es besser geht.......

  • Nochmal: Mach das in einer vernünftigen Programmiersprache ... Signalverarbeitung ist kein Job für die bash ... dann klappts auch mit dem Schalten.

    //EDIT: Da hamma uns überschnitten ...
    Versuchs mal in PHP, C, Python (pah!), Icon (von Andreas vorgestellt, was Neues hat aber was), ...

    cheers,
    -ds-

  • Ne ne ... Python scheidet nicht aus ;) ... das ist so eine kleine, interne Frotzelei ...

    Helfen ja, Python nein ... ich bin eher so ein hardwarenaher C-Gruschler ...

    Aber es gibt hier jede Menge Leute, die Ahnung von Python haben ... da musst Du Dir keinen Kopf machen.
    bash ist halt, wie ich schon schrieb, dafür eher ungeeignet. Ein sleep dauert mindestens eine Sekunde und wirklich abfragen kannst Du vielleicht noch die IOs ... aber dann dürfte so ziemlich Ende Gelände sein.

    Such mal in der Forensuche z.B. nach "Taster Python" oder "Python Taster GPIO" ...
    Da wirst Du garantiert fündig (doppelte Hochkommas natürlich weglassen).

    cu,
    -ds-

  • Hallo Firstfacility,

    das mit der ca 1 Sekunde finde ich interessant.

    Ich habe letztes Jahr mal versucht, eine GPIO-Library zu erstellen. Der erste Versuch bestand darin, ganz blöd die gängigen Bash-Skripte 1:1 in eine Programmiersprache (Icon) zu übertragen. Ein Schaltvorgang dauerte etwa 1100 ms - um Größenordnungen zu langsam, um irgendwas zu schalten oder gar irgendwelche Signale erkennen zu können oder irgendwelche Ereignisse, die sich im ms-Bereich ereignen, behandeln zu können.

    Ich habe mir dann näher angeschaut, was in dem Bash-Skript eigentlich passiert und habe ein wenig Datenstrukturen herum programmiert. Mittlerweile kann meine GPIO-Library im 10 ms-Bereich schalten und derartige Ereignisse erkennen.

    Definitiv ist Bash das Ungeeignetste, was man sich für Deinen Zweck vorstellen kann. Zum Ausprobieren, ob eine Schaltung prinzipiell funktioniert, ist das OK - aber für vernünftige Anwendungen, :s nee :wallbash: :@

    Beste Grüße

    Andreas


    Versuchs mal in PHP, C, Python (pah!), Icon (von Andreas vorgestellt, was Neues hat aber was), ...

    Hallo Dreamshader,

    oh, vielen Dank, da bewegt sich was in Sachen Icon.

    Die ersten - auf in der Programmiersprache Icon erstellten Anwendungen basierenden - Maschinen sind bereits industriell im Einsatz - und ich bekomme bereits Anfragen, diese in Kleinserie mit verschiedenen Features herzustellen.

    Was Im Januar 2013 ganz klein anfing (Hurra, Raspberry Pi schafft es, den Compiler-Quellcode zu compilieren und erzeugt dann auch noch lauffähige Programme, die in Icon erstellt wurden), hat jetzt eine Eigendynamik entwickelt.

    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

    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.

    Einmal editiert, zuletzt von Andreas (21. Juni 2014 um 19:31)

  • na jetzt habe ich grad mal mit python versucht:

    #!/usr/bin/env python
    import RPi.GPIO as GPIO
    from time import sleep
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(25, GPIO.IN)
    input_value=GPIO.input(25)

    while True:
    GPIO.input(25, True)
    print 'Klingel an'
    GPIO.input(25, False)
    print 'Klinge aus'
    sleep(0,1)

    jedoch bekomme ich einen Fehler :
    root@todesstern:/home/root# python klingel.py
    Traceback (most recent call last):
    File "klingel.py", line 4, in <module>
    GPIO.setmode (GPIO.BOARD)
    AttributeError: 'module' object has no attribute 'setmode'

    ich stehe grad etwas auf dem Schlauch könnte mir jemand sagen was er will ?

    Ich habe den Fehler gefunden, ich bin inzwischen soweit das die Abfrage läuft, es hakt zwar noch etwas am Code aber das ist mehr etwas für die Python Softies. Ich bedanke mich für eure Hilfe.

    Einmal editiert, zuletzt von firstfacility (22. Juni 2014 um 11:16)

Jetzt mitmachen!

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