PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupts laufen nicht korrekt - AVR MK2 mit ATmega168P



Unregistriert
25.08.2014, 13:38
Hallo,

ich arbeite mich gerade in die Mikrocontrollerprogrammierung ein. Aktuell kämpfe ich mit den Interrupts.

Das Board ist wie folgt verkabelt: Taster 1 an Port D.2, Taster 2 an D.3, grüne LED an B.1, gelbe LED an B.2, rote LED an B.3.

Das ist mein Programmcode:




.include "AVR.H"

begin: rjmp main ; RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
rjmp interrupt0 ; INT0 External Interrupt Request 0
rjmp interrupt1 ; INT1 External Interrupt Request 1
reti ; TIMER2 COMP Timer/Counter2 Compare Match
reti ; TIMER2 OVF Timer/Counter2 Overflow
reti ; TIMER1 CAPT Timer/Counter1 Capture Event
reti ; TIMER1 COMPA Timer/Counter1 Compare Match A
reti ; TIMER1 COMPB Timer/Counter1 Compare Match B
reti ; TIMER1 OVF Timer/Counter1 Overflow
reti ; TIMER0 OVF Timer/Counter0 Overflow
reti ; SPI, STC Serial Transfer Complete
reti ; USART, RXC USART, Rx Complete
reti ; USART, UDRE USART Data Register Empty
reti ; USART, TXC USART, Tx Complete
reti ; ADC ADC Conversion Complete
reti ; EE_RDY EEPROM Ready
reti ; ANA_COMP Analog Comparator
reti ; TWI 2-wire Serial Interface
reti ; SPM_RDY Store Program Memory Ready

;------------------------------------------------------------------------------

main: ldi r16, hi8(RAMEND)
out SPH, r16
ldi r16, lo8(RAMEND)
out SPL,r16

cbi DDRD, 2 ; D.2: Eingang, Taster
sbi PORTD, 2 ; Pull-Up
cbi DDRD, 3 ; D.3: Eingang, Taster
sbi PORTD, 3 ; Pull-Up

sbi DDRB, 1 ; B.1: grüne LED
sbi DDRB, 2 ; B.2: gelbe LED
sbi DDRB, 3 ; B.3: rote LED

sbi PORTB, 1 ; B.1: grüne LED ein
sbi PORTB, 2 ; B.2: gelbe LED ein
sbi PORTB, 3 ; B.3: rote LED ein

ldi r16, 0b00000011
out EIMSK, r16

ldi r16, 0b00001010
sts EICRA, r16

sei

;-----------------------------------------------------------------------------

mainloop: wdr
rjmp mainloop

interrupt0: cbi PORTB, 1 ; grüne LED aus
reti

interrupt1: cbi PORTB, 3 ; rote LED aus
reti



Was passieren soll: Die drei LEDs leuchten mit Programmbeginn. Bei Betätigung von Taster 1 wird die grüne LED per Interrupt abgeschaltet. Bei Betätigung von Taster 2 wird die grüne LED abgeschaltet.

Was passiert: Die LED leuchten. Taster 1 schaltet die rote LED aus, Taster 2 bewirkt gar nichts.

Ich kapier leider nicht, was da schief läuft, und bin für jede Hilfe dankbar.

registriert
25.08.2014, 14:24
Ach, ich hab mich verschrieben. Jetzt noch mal richtig und registriert :).

Was passieren soll: Die drei LEDs leuchten mit Programmbeginn. Bei Betätigung von Taster 1 wird die grüne LED per Interrupt abgeschaltet. Bei Betätigung von Taster 2 wird die rote LED abgeschaltet.

Was passiert: Die LEDs leuchten. Taster 1 schaltet die rote LED aus, Taster 2 bewirkt gar nichts.

ihle
26.08.2014, 06:18
Hallo,
versuche es mal mit LowLevel statt mit der fallenden Flanke,
also mit 0x00 bei eicra hat bei mir geholfen.

mfg

ihle

registriert
26.08.2014, 10:23
Hallo ihle,

LowLevel oder fallende Flanke war egal, bei beiden passiert das gleiche.

Ich habe aber eher zufällig herausgefunden, was der Fehler ist. Wenn ich in der Interrupt-Tabelle die rjmp Befehle durch jmp ersetze, funktioniert es. :confused: Ich benutze übrigens SiSy3 AVR private für die Programmierung.

Wsk8
26.08.2014, 12:50
Ich hoffe, du weißt auch warum es mit jmp, nicht aber mit rjmp funktioniert. Das ist nämlich ein großer Unterschied.

mfg

registriert
26.08.2014, 15:02
Ich weiß es leider nicht, zumal in dem Übungsbuch, dass ich benutze ("myAVR Lehrbuch Mikrocontroller-Programmierung", 11. Auflage) immer rjmp steht. Hinweise nehme ich dankend entgegen.

witkatz
26.08.2014, 15:41
Schau dir das Datenblatt deines Mikrocontrollers an, speziell die Tabelle der Interruptvektoren. Da gibt es Unterschiede zwischen den ATMega-Typen. Wenn Atmel Code-Samples im Datenblatt deines ATMega168 veröffentlicht, dann solltest du sie auch ernst nehmen und die ATMega8-Beispiele aus dem Übungsbuch auf deinen µC anpassen.

Wsk8
26.08.2014, 16:51
Hier stehen normal die ganzen Instructions drin: http://www.atmel.com/images/doc0856.pdf

Seite 11:
RJMP: PC <- PC + K + 1
JMP: PC <- K

mfg

registriert
27.08.2014, 09:27
Ahaaa. Vielen Dank, Wsk8 und allen anderen.