externer Interrupt und Port-Eingänge

Gast #100451
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
Gast #100452
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
Gast #100453
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
Gast #100455
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren