Forum: Mikrocontroller und Digitale Elektronik Tastenentprellzeit


von Daniel (Gast)


Lesenswert?

Hi Leute, ich weiss, vieles wurde schon erklaert und gefragt, aber ich 
braeuchte eure Hilfe. Und zwar habe ich ein kleines LCD Display mit 4 
Tasten und einem 4Mhz getakteten Mega32. Bei jedem Overflowinterrupt 
mache ich eine Tastenabfrage. Ich verwende diese Delayroutine:

inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
    if ( ! (*port & (1 << pin)) )
    {
        /* Pin wurde auf Masse gezogen, 100ms warten   */
        _delay_ms(30);  // max. 262.1 ms / F_CPU in MHz
        _delay_ms(30);
        if ( *port & (1 << pin) )
        {
            /* Anwender Zeit zum Loslassen des Tasters geben */
            _delay_ms(60);
            _delay_ms(60);
            return 1;
        }
    }
    return 0;
}

Leider muss ich ziemlich lange auf meine Tasten druecken um eine 
Reaktion zu sehen. Ich habe auch die Zeiten schon verkuerzt nur wird es 
damit irgendwie auch nicht besser. Koennte jemand mir vielleicht sagen, 
ob ich die Zeiten noch laenger machen soll, oder eher viel kuerzer. Denn 
ich habe keine Ahnung wie lange ein Schalter ungefaer braucht, oder was 
denn so ueblich ist. Oder sind die Zeiten ok und das Problem liegt wo 
anders.
Danke schon mal!!!

von Karl H. (kbuchegg)


Lesenswert?

Daniel wrote:

> damit irgendwie auch nicht besser. Koennte jemand mir vielleicht sagen,
> ob ich die Zeiten noch laenger machen soll, oder eher viel kuerzer.

Was du machen sollst.
Nimm diese Tasten-Abfrage-und-Entprellroutine
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29
und erfreue dich wunderbar entprellter Tasten ohne dass der Prozessor
da irgendwo auf irgendwas gross warten muss.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.