tastenentprellung

jonathan

Neues Mitglied
17. Mai 2012
4
0
0
Sprachen
  1. ANSI C
Hallo Leute,
ich möchte ein kleines Programm in C schreiben , das eine LED bei Tastendruck mittels extern Interrupts toggelt.
Das Problem ist , ich weiß nicht , wie ich Tastenentprellung in Diesem Fall realisieren soll (Ich habe noch nie eine Tastenentprellung mit extern Interrupts un Timer realisier).
Ich benutze das STK500 mit dem Atmega16 .
Kann jemand mir bitte erklären , wie man das realisiert ?
Gruß

Jonathan
 
Hallo Jonathan,

ich vermute, du möchtest die Tastaturabfrage via externem Interrupt einfach nur mal ausprobieren. In der Regel reicht es, wenn man dies im Hauptprogramm mit pollen erledigt. Falls allerdings im Hauptprogramm Programmteile zu viel Rechenzeit benötigen, kann es unter Umständen schon notwendig sein, Taster via Interrupt abzufragen.

Ein fertiges Beispiel habe ich jetzt leider nicht parat, aber vielleicht einen möglichen Lösungsansatz (es gibt sicherlich noch andere Lösungen):

Ich nutze hier den Ext Interrupt und einen Timer mit TimerInterrupt.
Der Ext Interrupt reagiert auf den Tastendruck (toggle LED), startet einen Timer (mit Interrupt) und sperrt sich selber.
Die TimerISR wird nun periodisch aufgerufen. In der TimerISR prüfst du, ob zweimal der Taster nicht betätigt ist. Falls das zutrifft Timer stoppen und Ext Interrupt wieder freigeben.
Vorteil: unabhängig vom Hauptprogramm.

Vielleicht setzt du das einfach mal in C für deinen Mikrocontroller um und schaust, ob es funktioniert.

Dirk :ciao:

Variable global:
volatile uint8_t scankeycount;

Initialisierungen im Hauptprogramm main():
(1) Einen Timer und zugehörigen Interrupt (Overflow oder Compare) initialisieren, so dass die ISR zB alle 5ms aufgerufen wird. Den Timer nicht starten.
(2) Ext Interrupt initialsieren

Ext Interrupt Serviceroutine:
- reagiert auf Taster -> LED toggelt
- disabled eigenen Interrupt
- scankeycount=1, Timer auf Startwert setzen und starten

Timer Interrupt Serviceroutine:
- Taster noch betätigt:
scankeycount=1, beenden
- Taster nicht betätigt:
wenn scankeycount > 0, dann scankeycount--, beenden.
ansonsten Timer Stopp, Ext Intterrupt enable
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)