www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik externer Interrupt


Autor: Andreas 2000 (andreas2000)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie bringe ich dem externen Interrupt INT1 bei auf welchen Pin er
reagieren soll?
define?
aus dem AVR-GCC-Tutorial werde ich nicht schlau.
Ich benutze den Atmega8 mit dem AVR-Studio.
Ein kurzer Quelltext in C wäre nett.

Danke

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gar nicht. Der ist in Hardware gegossen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wie bringe ich dem externen Interrupt INT1 bei auf welchen Pin er
> reagieren soll?

Gar nicht. Der ist fest mit dem gleichnamigen Pin verdrahtet.

Autor: Andreas 2000 (andreas2000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
alles klar, habe ich übersehen!
danke!!

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/***************************************************
Tasterdruck an PD2 (INT0) --> LEDs gehen an
Tasterdruck an PD3 (INT1) --> LEDs gehen aus
***************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>


SIGNAL (SIG_INTERRUPT0)
{
  PORTB = 0x00;
}

SIGNAL (SIG_INTERRUPT1)
{
  PORTB = 0xff;
}

int main (void)
{
  DDRB = 0xff;
  MCUCR = (1<<ISC11) | (1<<ISC01);
  GICR = (1<<INT1) | (1<<INT0);
  sei();
  while(1);

  return 0;  //wird nie erreicht
}

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muaaa... Tastendrücke und daruaf triggernde Interrupts. Böse!
Als Beispiel vielleicht noch akzeptabel.

Autor: Andreas 2000 (andreas2000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Christian,
so funktioniert das mit den Tasten!
Ich muß mal schauen wie zeitkritisch sich das ganze bei einer längeren
main verhält.

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gar nicht. Dafür sind Interrupts ja da.
Das Main wird unterbrochen und der Interruptcode ausgeführt.
Danach geht's im Main an der unterbrochenen Stelle weiter.
Es sei denn, du verwendest noch weitere Interrupts. (Timer, Uart) in
denen übermäßig viel Code steht.


MfG

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn, wie es bei Tastern nun mal passiert, das Signal am Eingang
prellt, springt der Controller diverse Male aus der Main heraus.
Tasten wertet man aus, indem man sie per Timer in regelmässigen
Abständen (zig Millisekunden) abfragt (siehe Peter Danneggers
Tastenabfrage - Bulletproof).
Einen Interrupt benutzt man höchstens, wenn man den Controller wecken
will (Stromspar-Modus).
In ISR sollte nach Möglichkeit so wenig Code wie möglich stehen, ausser
wenn das Programm nur aus der ISR besteht.

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selbst wenn die Tasten in diesem Beispiel prellen, ist das derast
unerheblich, dass sich der Mehraufwand im Code nicht lohnt.

Hier sind keine Impulse zu zählen noch Zeitabstände zu messen.

>Einen Interrupt benutzt man höchstens, wenn man den Controller wecken
>will (Stromspar-Modus).

Nein, dann bräuchte man wohl nicht so viel verschiedene
Interruptquellen.

Interrupts werden benutzt, wenn der µC sofort auf ein Ereignis
reagieren soll. Meistens werden in den ISR nur Flags gesetzt, die im
Main ausgewertet werden.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade dass es immer wieder Unbelehrbare gibt, die solchen Schwachsinn
hier verbreiten müssen.

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@christian:
Du scheinst nicht ganz nachvollziehen zu können, dass es bei einem
Taster überhaupt nicht darauf ankommt, sofort (im µC-Sinn, d.h. in
wenigen µs) zu reagieren! In den meisten Anwendungen ist es
Verschwendung, Taster mit einem Interrupt abzufragen. Wenn man die Pins
natürlich eh frei hat, dann kann man tun was man will, aber wenn Du
einen Taster betätigst, ist Dir als menschlicher Bediener völlig
schnurz, ob der Tastendruck erst 10 ms später bearbeitet wird. Es gibt
u.U. wichtigere Ereignisse, für die es sich lohnt, einen Interrupt zu
spendieren. Außerdem ist eine Entprellung bei einer Abfrage über eine
Timer-ISR viel einfacher, weil im Prinzip schon drin! Interrupts sind
genaugenommen für Taster zu schnell!

Das was der inoffizielle oben über das Aufwecken geschrieben hat,
bezieht sich darauf, dass es eigentlich nur einen wirklichen
Anwendungsfall für einen externen Interrupt in Zusammenhang mit einem
Taster gibt, und das ist eben der, wenn man den µC per Tastendruck aus
dem Schlaf holen will!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes:
Wie recht Du wieder mal hast...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Einen Interrupt benutzt man höchstens, wenn man den Controller wecken
>will (Stromspar-Modus).

In Zusammenhang mit Tasten (und anderen langsamen, mechanischen
Bauteilen, die nachschwingen), sollte man die Verwendung von Intertupts
vermeiden.

Wenn du dafür aber unbedingt Interrupts verwenden willst, soll es mir
egal sein. Ich mache es nicht.

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gäääähn

Thema lesen und nicht künstlich aufregen.

Es ging hier allgemein um die Funktionsweise der externen
Interrupt-Pins.
Wie und wozu er die PINs (INT0 , INT1)nutzt, ist jedem selbst
überlassen.

...noch was?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und das ist eben der, wenn man den µC per Tastendruck aus
> dem Schlaf holen will!

Richtig!
Und dann schaltet man in dieser ISR nur den Ext. Low-Level-Interrupt
aus, dann den Power-Down-Mode ab (Umschalten in IDLE-Mode), worauf die
Timer wieder laufen und die timergestützte Tastenentprellung die Taster
auswertet und dabei feststellt, ob es wirklich ein Tastendruck war oder
vielleicht nur ein Störimpuls. War es nur ein Störimpuls, so kann der
Programmteil, der für den Bedienungs-Timeout zuständig ist, den AVR ja
wieder in den Power-Down-Mode schicken.

Die Dannegger-Entprellung von bis zu 8 Tasten braucht alle 20ms ganze
11 Controllertakte in der Timer-ISR, die nebenbei noch andere Dinge
erledigen kann. Das ist bei 1MHz weniger als 0,1% der verfügbaren
Rechenleistung. Sie stellt dabei dem Hauptprogramm neben dem
entprellten Tastenstatus auch Flags zur Verfügung, die das erneute
Drücken einer Taste signalisieren (auch falls diese Taste bereits
wieder losgelassen wurde), auch bei mehreren Tasten gleichzeitig.
Wer diese Routine verschmäht, dem ist eigentlich nicht zu helfen, dem
kann man nur raten, dass 'Malen nach Zahlen' auch ein schönes
kreatives Hobby ist. ;-)

...

Autor: Juergen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Hier sind keine Impulse zu zählen noch Zeitabstände zu messen."
Ja, einen Interrupt baucht man hier höchstens, wenn man das Prellen
mitzählen will, z.B. bei einem Teststand für Schaltertests. :-)

"In ISR sollte nach Möglichkeit so wenig Code wie möglich stehen"
Richtig

"wenn das Programm nur aus der ISR besteht."
Was ist denn das für ein Programm ;-(  Wehe, wenn ich den Prof
erwische, der den Studenten die Idee eingeflößt hat, man könne alles
nur mit ISRs lösen , die sich gegenseitig unterbrechen, um Multitasking
und Realtime-Aufgaben zu lösen ...

"Interrupts werden benutzt, wenn der µC sofort auf ein Ereignis
reagieren soll. Meistens werden in den ISR nur Flags gesetzt, die im
Main ausgewertet werden."
Brav! :-)

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Studenten

Hast du was gegen Studenten?

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.