www.mikrocontroller.net

Forum: Compiler & IDEs externer Interrupt und Port-Eingänge


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halli hallo an Alle!

Habe mich heute mal an dem externen Interrupt INT0 versucht. Bin zwar
zu einem Ergebnis gekommen, aber so richtig verstanden habe ich das
noch nicht.

Verwende folgenden Code:

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

#define F_CPU            3680000      /* 3,68Mhz */

/*
**  module global variables (note: global variables are automatically
initialized to zero)
*/
static volatile uint8_t led;     // use volatile when variable is
accessed from interrupts


/*
** functions
*/

SIGNAL(SIG_INTERRUPT0)
/* signal handler for external interrupt int0 */
{
    led++;
    PORTB = ~led;
}


int main(void)
{
    DDRB  = 0xff;                // use all pins on PortB for output
    PORTB = 0xff;                // and turn off all LEDs

    DDRD  = 0x00;                // use all pins on port D for input
    PORTD = 0xff;                // activate internal pull-up

    outp((1<<INT0), GIMSK);           // enable external int0
    outp((1<<ISC01)|(0<<ISC00) , MCUCR);      // falling egde: int0

    sei();                       // enable interrupts

    for (;;) {}                  // loop forever
}


Ich habe einen ATmega16 und ein STK500. Der Interrupt wird leider nur
ausgelößt, wenn ich den Taster2 drücke. Wieso wird der Interrupt nicht
bei den anderen ausgelöst?

Habe das auch mal mit einem anderen Programm getestet. Da war Port B
der Eingang...und gar nichts passierte.

Wie verhält sich das mit den Eingangsports und den Interrupts? Muss man
denn noch speziell angeben, auf welchem Port/Pin der Interrupt zu
erwarten ist? Oder geht es nicht mit jedem Port?

Bin sehr dankbar für jeden guten Hinweis,

Ciao Thomas

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Int0 wird nur mit einem Signal am entsprechenden Pin (mega16: PD.2)
ausgelöst. Du kannst diesen IR mit keinem anderen Pin auslösen.

Int1 gibt es auch noch, an PD.3.

Was Du (glaube ich) meinst, ist ein Pin-On-Change-Interrupt, den gibt
es bei manchen Controllern. Da wird ein ganzer Port (8 Pins) abgefragt.
Bei der mega-Serie gibt es das beim mega88, wenn der jemals fertig wird
...

Stefan

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Stefan!

danke für die schnelle Info. Das reicht mir schon. Ich dachte nur an
meinem Programm hat was nicht hingehauen. Wieso findet man das nicht im
Datenblatt und Externer Interrupt??? Nun gut, dann werde ich mein
Eingangssignal einfach auf PD.2 legen und alles ist,okay.

Ciao Thomas

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht doch da:
"the external interrupts are triggered by the INT0, INT1, and INT2
pins"

Sprich: den INT2 habe ich Dir ganz unterschlagen. Der ist auf PB.2.

Stefan

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, das steht schon da. Da habe ich das immer falsch verstanden. ich
dachte immer int0,1,2 sind die interrupts die man anschalten kann. aber
habe gerade  nochmal bei der PINConfig. geschaut...da sieht man es ja
auch sehr deutlich...

also vielen Dank nochmal!

Ciao Thomas

Autor: M. de Beyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas,

denk daran, daß der Interrupt auch ausgelöst wird, wenn du den PortPin
als Ausgang deklariert hast und du den Pin togglen läßt.

Michael

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.