-         

Ergebnis 1 bis 5 von 5

Thema: Prüfen ob Taster eine bestimmte Zeit unterbrechungsfrei gedrückt ist

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510

    Prüfen ob Taster eine bestimmte Zeit unterbrechungsfrei gedrückt ist

    Anzeige

    Hallo liebes Forum,

    ich habe an einem AtMega8 einen selbstgebauten Touchschalter angebracht, als Ersatz für einen normalen Taster.
    Dieser Schalter ist ziemlich sensibel, manchmal reagiert er auch wenn man in etwas weiterm Abstand an dem Schalter vorbei greift.

    Ich habe mir als Lösung des Problems überlegt, dass es, um als eindeutig gewolltes Schalten gewertet werden zu können, nötig ist dass der Schalter drei Sekunden ausgelöst wird.

    Ich könnte jetzt natürlich nach dem ersten Schaltsignal ein wait() einbauen und danach nochmal testen ob der Eingang immer noch geschaltet ist aber dadurch könnte ich nicht feststellen ob es nicht zufällig so ist, dass wieder ein Signal anliegt.

    Ich muss also ein unterbrechungsfreies Berühren detektieren.

    Meine Idee war jetzt ab dem ersten Detektieren einer vermeintlichen Berührung eine Variable bei jedem Durchlaufen der Hauptschleife um 1 hochzuzählen.
    Sobald kein Signal mehr anliegt wird die Variable wieder auf 0 gesetzt.
    Wenn jedoch bis zu einem gewissen Schwellwert gezählt wird dann gilt es als beabsichtigtes Schalten.

    pseudocode:
    Code:
    zaehler = 0
    while
    
    if schalter == 1 then
    zaehler ++
    else zaehler = 0
    
    if zaehler > schwelle
    .......
    
    
    
    endwhile

    was haltet ihr davon?
    Gibt es eine bessere Möglichkeit?

    danke für eure Ideen!

    Crypi

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Dann wird aber irgendwann der Schwellwert sowieso erreicht werden, wenn die hochzählende Variable nie zurückgesetzt wird. Ich würde es eher so machen:
    Bei jeder hochlaufenden Flanke des Tasters eine Variable inkrementieren und nach 50ms zurücksetzen lassen. Wenn dann ein Schwellwert erreicht wird, gilt der Taster als gedrückt.
    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510
    Im Else-Fall wird der Zähler doch auf 0 gesetzt?!

    Deine Variante verstehe ich ehrlich gesagt nicht.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Wenn Du noch einen Timer und eine Interrupt-Eingang frei hast, ginge es auch ganz ohne das Hauptprogramm aufzuhalten:

    Du konfiguriertst den Interrupt als "Change", d.h. er wird bei jeder Flanke ausgelöst.
    In der ISR checkst Du, ob der Taster gedrückt oder losgelassen wurde (über eine If-Then-Abfrage des INT-Eingangs)
    Wurde er gedrückt, startest Du den Timer, der so konfiguriert (bzw. vorgeladen) ist, dass er nach 3 Sek. überläuft.
    Wurde er losgelassen, stoppst Du den Timer und setzt ihn zurück.

    In der Timer-ISR wird dann eine Bit-Variable auf 1 gesetzt, die in der Hauptschleife abgefragt wird und den dreisekündigen Tastendruck signalisiert (und nach Ausführen der entsprechenden Aktion wieder auf 0 gesetzt wird).

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510
    Guten Morgen!

    das klingt nach einer guten Idee!
    Das werde ich ausprobieren danke!

    Ich habe meine Lösung mal umgesetzt, dass funktioniert auch zufriedenstellend.

    Aber deine wäre natürlich eleganter.

    Danke für eure Hilfe!
    Crypi

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 04.01.2010, 17:06
  2. int0 eine bestimmte Zeit abschalten
    Von umbras im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 26.09.2008, 20:59
  3. robby für eine bestimmte zeit fahren lassen
    Von 3dfreak im Forum Robby CCRP5
    Antworten: 3
    Letzter Beitrag: 31.07.2007, 17:45
  4. Taste eine bestimmte Zeit abfragen
    Von picprogger im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 14.03.2007, 22:29
  5. Antworten: 5
    Letzter Beitrag: 02.02.2007, 11:03

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •