March 11th, 2010

 vorheriger Artikel
« Beispiel CAN Bus Testapplikation für AT90CAN128


Externe Interrupts mit dem AVR leicht gemacht

Die Unterschiede zwischen Polling und Interrupt sind in einem älteren Beitrag schon aufgelistet. Theorie findet man jedoch sehr oft. Hier findet ihr ein einfaches Beispiel wie man einen Taster per Interrupt eine Aktion ausüben lässt. Das Beispiel ist für einen AT90CAN128 mit folgender Hardwarekonfiguration:

  • - Taster an PORT E, PIN 7
  • - LED an PORT E, PIN 6

Beim Initialisieren aktiviert man die Interrupts und konfiguriert wann dieser ausgelöst werden soll:

//  Init Taster
DDRE  &= ~_BV(7);    // PORT E, PIN 7 als Eingang definieren

EIMSK |= _BV(INT7);  // Interrupt fuer Pin 7 aktivieren
EICRB |= _BV(ISC50); // steigende Flanke erzeugt einen INT
EICRB |= _BV(ISC51);

//  Init LED
DDRE  |= _BV(6);     // PORT E, PIN 6 als Ausgang definieren

sei();    //activate global interrups

In der ISR für Signal 7 kann dann eine Aktion erfolgen oder ein selbst erstelltes Flag (in einer Variablen) gesetzt werden.

//  ISR Taster
SIGNAL(SIG_INTERRUPT7)
{
  // LED an
  PORTE |= _BV(6);

  // entprellen
  delay_ms(100);
}

Die beiden Dateien stehen hier zur Verfügung.

Tags: , , ,



Leave a Response

Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Kommentare-RSS