July 26th, 2017

Externe Interrupts mit dem AVR leicht gemacht3

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: , , ,


CANBus Empfänger, Interrupt gesteuert0

Die Entwicklung unseres Projekts für das EL2 Labor nähert sich mit großen Schritten dem Ziel. Heute ist es mir gelungen denPIC so zu programmieren, dass er CAN-Nachrichten mit zwei verschiedenen IDs liest und die darin enthaltene Temperatur auf dem Display ausgibt.

Das Konzept ist so gestaltet, dass der Prozessor im Hauptprogramm die Werte der temporären Speicher für die zwei Temperaturen auf das Display schreibt. Das lesen der CAN-Nachrichten ist Interrupt gesteuert, d.h. wenn eine Nachricht eintrifft wird ein Interrupt ausgelöst der dann den Inhalt in die oben genannten Speicherzellen kopiert.

Die Software ist bei den Projektdateien oder hier zu finden.

Tags: , , ,


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