mikrocontroller.net

Forum: Compiler & IDEs Interrupt und Sleep Mode


Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tastenabfrage in den Timer-IRQ. Siehe auch diverse andere Postings hier
im Forum.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit "~" = Bitweise Negation...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.