Hallo, leider habe ich hier ein Problem mit einem externen Interrupt eines Mega128. Ersteres Problem ist was für Register ich setzten muss damit überhaupt was passiert wenn ich auf eine fallende Flanke an INT0 (PD0) triggern will. Ich mache bisher: EICRA |= (1<<PD0); EIMSK |= (1<<INT0); Gelegentlich kommt es auch zu einem Interrupt aber scheinbar nicht jedes mal. Global habe ich interrupts aktiviert, externe Pull-Up Widerstände sind vorhanden. Das zweite Problem ist eher ein kosmetisches. Ich verwende im Moment SIGNAL(SIG_INTERRUPT0) weil ich nicht herausfinden konnte welche die entsprechende ISR(???) anweisung dafür ist. Vielen Dank Thomas
#include <mega128.h> // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here } // Declare your global variables here void main(void) { // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off // INT2: Off // INT3: Off // INT4: Off // INT5: Off // INT6: Off // INT7: Off EICRA=0x02; EICRB=0x00; EIMSK=0x01; EIFR=0x01; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ETIMSK=0x00; // Global enable interrupts #asm("sei") while (1) { // Place your code here }; }
Danke Dir! Leider habe ich jetzt das Problem dass das Programm gelegentlich in den Interrupt springt (wenn eine Flanke kommt, also in Ordnung), manchmal führt der Controller aber stattdessen einen Reset aus! Kann das ein Softwareproblem sein oder meint ihr es liegt an der Hardware?
Das Problem tritt auch auf wenn ich den Teil auskommentiere. Ich beginne daher ein neuen Thread.
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.