-         
+ Antworten
Ergebnis 1 bis 10 von 10

Thema: Tastenabfrage

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.09.2004
    Ort
    Augsburg
    Beiträge
    49

    Tastenabfrage

    Hi, hier wollte ich mal allgemein nach Techniken fragen wie man Tasteneingaben bzw. eine Tastenabfrage am geschicktesten im Programm einbaut!
    Weil irgendwie gibts ja immer Probleme mit Tastenprellen bei direkter Abfrage mit externen Interrupts. Vielleicht hat ja jemand einen einfachen Schaltplan um Tasten zu entprellen - könnte ich mir ganz einfach mit einem Widerstand und einem Kondensator vorstellen. Auch wären hier einfache oder auch profimäßige Lösungen per Software sehr interessant.

    Um was es auch noch geht, bei Komerziellen Geräten wie z.B. herkömmlichen CD-Playern oder Handys folgt auf einen Tastendruck sofort eine Reaktion und ich habe einen klar definierten Schaltpunkt. Ganz im gegensatz zu manchen DVD Playern oder manchen Settop Boxen für TV bei denen man nicht immer genau weiß ob man schon gedrückt hat oder nicht, was ich persönlich ziemlich nervig finde.
    Vielleicht weiß ja jemand wie das professionell gelöst wird : Interrupt, Polling............

    So um gleich mal die Grundsatzdiskussionen auszublenden - wieso willst du denn das nicht mit Software machen ist viel einfacher/billiger - oder ähnliches, um das gehts hier nicht. Es soll einach hier mal eine Sammlung von Lösungsansätzen und Anregungen sein.

    gruß Werner...

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also das entprellen der Taster geht am einfachsten mit einem 100nF Kondensator dazuschaltest. Der Tastpunkt hängt vom Taster ab, es reichen günsige von Reichelt für einige cent. Warum manche Taster besser oder schlechter sind, kann ich nicht sagen. Schau mal nach "kurzhubtaster" bei Reichelt ab 7 cent. Um Ports zu sparen macht man es oft so, dass man ein Widerstandsnetzwerk nimmt und direkt mehrere Taster dran hängt, schließt man das ganze an einen AD eines AVRs, kann man dann rückschlüsse auf die Taster machen, da unterschiedlieche Spannungen wegen unterschiedlichen Widerständen eingehen, je genauer die Widerstände, desto größere Rückschlüsse kann man z.B. darauf schließen ob 2 Taster gleichzeitig gedrückt sind. Die Geschwindigkeit der AVRs ist ausreichend, um quasi eine sofortige Reaktion auszukösen. Sicher, am schnellsten gehts mit interrupts, aber die Meisten AVRs verfügen nur über wenige externe, diese Problem lässt sich durch dioden lösen, so könnte jeder Taster über eine Diode einen INterrupt auslösen, in dem dann der AD gecheckt und ausgewertet wird.
    Ich denke allerdings, dass man wenn man eine relativ schnelle Hauptschleife benutzt kein Problem mit der Geschwindigkeit haben wird.

    Ich hoffe, ich habe deine Frage so richtig verstanden und konnte dir helfen.

    MFG Moritz

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.09.2004
    Ort
    Augsburg
    Beiträge
    49
    ja so hab ich mir das vorgestellt - vielleicht gibts ja noch mehr anregungen oder gedanken die in eine andere richtung gehen.
    gruß Werner...

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Wie andere Richtung? Sorry, soll keine Kritik sein, aber ich weiß nicht ganz was du meinst, su willst doch nur einen Schalter anschließen, oder?

    MFG Moritz

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.09.2004
    Ort
    Augsburg
    Beiträge
    49
    na ich hab jetzt in meinem programm z.b. eine menüstruktur die immer durchlaufen wird ähnlich wie in einem handy und auch sonst noch ein paar aufgaben die nebenbei erledigt werden.

    wenn jetzt eine taste gedrückt wird passiert nicht immer sofort was - kommt halt ganz drauf an wo er gerade steckt und auch deswegen weil ich die taste ja mit einer gewissen verzögerung abfragen muß.
    wenn ich die taste aber schneller abfrage flitzt er so schnell durch das menü daß ich nix mehr sehen kann.

    so also jetzt gehts quasi darum wie man einen definierten schaltpunkt auch im mikrocontroller direkt sofort umsetzen kann ohne daß aber sofort alles so schnell abläuft daß man nix mehr sehen kann auf dem display.

    bzw. soll aber auch eine wiederholfunktion bei der tastenabfrage realisiert werden -> wenn ich auf der taste bleibe z.b. zum Uhrzeit einstellen sollen die ersten 10 schritte die minuten und alle weiteren schritte dann die stunden hochzählen also wie man das halt auch kennt von einem radiowecker. oder einfach soll sich die wiederholgeschwindigkeit nach jeweils 10 schritten erhöhen.

    an sowas hatte ich noch gedacht.
    gruß Werner...

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2004
    Beiträge
    14
    Meine Lösung:


    Code:
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 tastenpoll                       
    
    tastenpoll:
    if pincc.6=1 then 
    machirgenwas
    end if
    
    Do
    Loop Until Pinc.6 = 1
    waitms 5
    
    return
    Nachteil, erst wenn der Taster wieder losgelassen wird kommt das Programm aus der DO LOOP Schleife raus.
    Etwas verfeinert mit einer Bit Hilfsvariable, kann ich steuern ob die DO LOOP Schleife überhaupt relevant wird und ein Tasten´wiederholung benötigt wird.
    Code:
    If Tasterok = 1 Then                                        
    
    Disable Timer0
    Waitms 1
    Do
    Loop Until Pinc.6 = 1
    Enable Timer0
    tasterok=0
    Tasterok wird vorher im Programmablauf auf 0 gesetzt, wenn die DO LOOP Schleife nicht verwendet werden soll.

    Thomas

  7. #7
    Gast
    deine lösung funktioniert bestimmt aber man sollte in einer interrupt routine nur möglichst kurz bleiben um den restlichen programmablauf nicht zu blockieren und ich glaube auch daß dann die restlichen interrupts sowieso nicht durchkommen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    je genauer die Widerstände, desto größere Rückschlüsse kann man z.B. darauf schließen ob 2 Taster gleichzeitig gedrückt sind.
    Wie willst du das machen, dass auch parallele Betätigungen erkannt werden? Ich habe mir dazu auch schon gedanken gemacht und bin dazu gekommen, dass man wahrscheinlich nur 1 drücken kann und andernfalls wird aus dem Wert u.U. ein anderer taster erkannt. Wobei wenn man Widerstände mit 2er-Potenz Werten nehmen würde müsste es gehen, jedoch bekommt man die eher nicht als Widerstands-Netzwerk, oder?

    Schönen Abend noch!
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Wobei wenn man Widerstände mit 2er-Potenz Werten nehmen würde müsste es gehen, jedoch bekommt man die eher nicht als Widerstands-Netzwerk, oder?
    Das ist mein Gedanke! Der Asuro-Roboter verwendet eben diesen "Trick".
    Taster 1 -> 1 k
    Taster 2 -> 2 k
    Taster 3 -> 4 k
    ...

    Eben "2er-Potenz"en. Das ganze dann rückgängig zu machen ist etwas schwieriger. Beim Asuro ist es so, dass ein Rechnung durchgeführt wird, die durch runden dann die einzelnen Bits einer Varialben setzt.
    Der Roboter verfügt ja über 6 Taster. Als ich den Code von C in Basic "übersetzt" habe, hatte ich an der Funktion ganz schön zu tüffteln. Verwendet werden sollte nach Möglichkeit ein 10 und kein 8 Bit ADC, aber das ist ja klar. UNd außerdem möglichst genaue Widerstände. Das ganze funktioniert auf jeden Fall einwandfrei.

    MFG Moritz

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Ich habe in PHP mal ne Funktion geschrieben die solche zahlen zerlegt. Da ging es zwar um User-Rechte die damit definiert sind, aber das ist ja irrelevant...
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

+ Antworten

Berechtigungen

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