Interrupt und Sleep Mode

Gast #76736
Lesenswert?

Hi

Ich habe ein kleines Problem und zwar benötige ich 1 Taster, dieser hat
zwei Funktionen:

kurz drücken : variable raufzählen
lang drücken : in den Power down mode


Ich habe den Taster an den INT0 Pin angehängt.

Mein Problem:


Normalerweise ist der INT0 auf die pos. Flanke getriggert. Für das
Aufwachen aus dem Sleep Mode, muss ich ihn aber LOW Level Triggern.

Nun drücke ich den Taster lang, der sleep Mode (Power Down) wird
aufgerufen. Der Taster ist immer noch gedrückt und darum wird gerade
ein Low Level Interrupt ausgelöst und der uC erwacht wieder!


Weiss jemand, wie ich mein Problem lösen kann?
#76738
Lesenswert?

Taste im Timerinterrupt entprellen und dann in der Hauptschleife vor der
Interruptfreigabe und dem Sleep warten, bis entprellter Zustand ==
Taste losgelassen.

Tasten können auch beim Loslassen prellen und dann würdest Du ohne
Entprellung sofort wieder aufwachen.


Peter
Gast #76739
Lesenswert?

Ach so, vielen Dank...

Eigentlich wollte ich, dass man den Taster drücken kann so lange man
will und er nach 2sec in den Sleep Mode gesetzt wird...

Jetzt muss ich ihn halt loslassen und erst dann wird der uC
abgeschaltet...

Geht halt nicht anders...


Noch eine Frage:


Wie kann ich ein Taster einlesen und dann ein Flag setzen, wenn er 0
ist?: Die funktion bit_is_clear gibt ja den Wert der Stelle zurück!
(sehe ich das richtig?)


FLAG Definition:
struct
{
    unsigned char taster_flag:1;
} x;

Taster einlesen:

x.taster_flag = bit_is_clear(PIND,2);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren