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
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
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
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
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
@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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.