Hallo, ich teste gerade auf meinem Atmega 2560 die externen interrupts und kann sie irgendwie nicht dazu überreden auszulösen. Hab zum Test mal einen externen Taster per externem Pull up Wiederstand angeschlossen. Gibts ausser dem sei Befehl, der Pin Konfiguration als Einfgang, dem EIMSK und dem EICRB noch weiteres zu beachten, was ein Interruptsauslösen verhinern lönnte? Grüße Wolfgng Anbei der Code: // Taster hängt an PB4 dran, sollte also Interrupt Int 4 auslösen... // Taster ldi r_temp, 0x00 // PB0-PB7 inputs out DDRB, r_temp ldi r_temp, 0x00 out PORTB, r_temp // Interrupts initialisiere ich so... // Initilize Interrupts INT5 (PB5) + INT4 (PB4) // Set Interrupt Mask Register and enable INT7 and INT6 ldi r_temp, (1<< INT5) | (1<< INT4) out _SFR_IO_ADDR(EIMSK), r_temp // Set Triggers... // Low Level Generates IRQ (00) // Any Change Generates IRQ (01)<- Selected // Falling Edge Triggers IRQ (10) // Rising Edge Triggers changes (11) ldi r_temp, (0 << ISC51) | (1<< ISC50) | (0 << ISC41) | (1<< ISC40) sts _SFR_IO_ADDR(EICRB), r_temp sei Probiere ich im Hauptprogramm das ganze per Polling funktioniert es übrigens: loop: in r_temp, PINB out DEBUG_PORT, r_temp andi r_temp, (1<<PINB4) cpi r_temp, (1<<PINB4) brne on LED_OFF rjmp loop on: LED_ON rjmp loop
Wie wäre es denn mal mit komplettem Code?
Und was ist das für ein Ding?
> externem Pull up Wiederstand
Und wieder stand da was geschrieben, was es nicht gibt. Und auf dem
Markt stehen wieder Stände.
mfg.
Ok, kompletter Code ist folgender (Achtung, hab dran rumgeschraubt seit dem letzten Posting)... #include <avr/io.h> #define _SFR_ASM_COMPAT 1 #define __SFR_OFFSET 0 #define r_temp r17 #define r_sreg_save r18 #define DEBUG_PORT PORTC #define TASTER_PORT PORTB #define LED_PORT PORTF // Makro Definitions .macro LED_ON ldi r_temp, 0x00 out LED_PORT, r_temp .endm .macro LED_OFF ldi r_temp, 0xFF out LED_PORT, r_temp .endm // Main Program .global main main: // Setup Stack Pointer ldi r16,lo8(RAMEND) ;load the stack pointer out SPL,r16 ldi r16,hi8(RAMEND) out SPH,r16 // Configure Ports // Led ldi r_temp, 0xFF // PF0-PF7 outputs out DDRF, r_temp // Taster ldi r_temp, 0x00 // PB0-PB7 inputs out DDRB, r_temp ldi r_temp, 0x00 out PORTB, r_temp // Debug ldi r_temp, 0xFF out DEBUG_PORT, r_temp // Initilize Interrupts INT5 (PB5) + INT4 (PB4) // Set Interrupt Mask Register and enable INT7 and INT6 ldi r_temp, (1<< INT5) | (1<< INT4) out _SFR_IO_ADDR(EIMSK), r_temp // Set Triggers... // Low Level Generates IRQ (00) // Any Change Generates IRQ (01) // Falling Edge Triggers IRQ (10) // Rising Edge Triggers changes (11) <- Selected ldi r_temp, (0 << ISC51) | (1<< ISC50) | (0 << ISC41) | (1<< ISC40) sts _SFR_IO_ADDR(EICRB), r_temp // Set Pin Change Interrupt Registers... ldi r_temp, (1<<PCINT4) | (1<<PCINT5) sts _SFR_IO_ADDR(PCMSK0), r_temp sei LED_OFF loop: in r_temp, PINB out DEBUG_PORT, r_temp /* andi r_temp, (1<<PINB4) cpi r_temp, (1<<PINB4) brne on LED_OFF rjmp loop on: LED_ON */ rjmp loop // Interrupt Handlers .global INT4_vect INT4_vect: in r_sreg_save,_SFR_IO_ADDR(SREG) LED_ON out _SFR_IO_ADDR(SREG), r_sreg_save reti .global INT5_vect INT5_vect: in r_sreg_save,_SFR_IO_ADDR(SREG) LED_ON out _SFR_IO_ADDR(SREG), r_sreg_save reti
Das mit dem Widerstand werd ich mir hinter die Ohren schreiben ;-) Hat ansonsten keiner ne Idee warum es so nicht funktioniert?
Wolfgang Meyerle schrieb: > Hat ansonsten keiner ne Idee warum es so nicht funktioniert? Nun guck mal auf die Uhr. Ich hab' da jetzt auch keine Lust mehr, das durchzukauen. Warte mal bis morgen. Naja, eigentlich ist da ja auch schon heute. mfg.
Na ok. Hast eigentlich Recht. Debugge gerade noch mit AVRICE aber ich denke mal der Hund liegt schon im Source begraben, wenn ich's simulier und den Pin per Hand setze löst er im Simulator auch schon nicht mehr aus. Also das Problem ist definitiv im Code denke ich, Polling funktioniert ja und die LED geht an, also ein Schaltungsproblem ist es wohl nicht... Trotzdem danke.
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.