- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Interrupts laufen nicht korrekt - AVR MK2 mit ATmega168P

  1. #1
    Unregistriert
    Gast

    Interrupts laufen nicht korrekt - AVR MK2 mit ATmega168P

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:

    Code:
    .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.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    25.08.2014
    Beiträge
    7
    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.

  3. #3
    RN-Premium User Stammmitglied
    Registriert seit
    26.01.2005
    Ort
    Leipheim / Donau
    Beiträge
    53
    Hallo,
    versuche es mal mit LowLevel statt mit der fallenden Flanke,
    also mit 0x00 bei eicra hat bei mir geholfen.

    mfg

    ihle
    Geändert von ihle (26.08.2014 um 09:11 Uhr)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    25.08.2014
    Beiträge
    7
    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. Ich benutze übrigens SiSy3 AVR private für die Programmierung.
    Geändert von registriert (26.08.2014 um 13:07 Uhr)

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Ich hoffe, du weißt auch warum es mit jmp, nicht aber mit rjmp funktioniert. Das ist nämlich ein großer Unterschied.

    mfg

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    25.08.2014
    Beiträge
    7
    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.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    53
    Beiträge
    540
    Blog-Einträge
    17
    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.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    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

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    25.08.2014
    Beiträge
    7
    Ahaaa. Vielen Dank, Wsk8 und allen anderen.

Ähnliche Themen

  1. easyAVR Board mit AVR Studio und AVR ISP mkII/mk2
    Von TheDarkRose im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 29.01.2011, 11:15
  2. Ich kann den ATmega168P nicht löschen
    Von sero_77 im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 11.12.2008, 16:31
  3. Funktioniert Bascom Terminal mit AVR-MK2 USB ?
    Von Dreiadriger im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 31.10.2008, 23:24
  4. AVR ISP mk2 mit AVR Studio 4.11 oder in C?
    Von papuadive im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 31.01.2008, 19:42
  5. Kann keine Programme mit AVR ISP mk2 übertragen
    Von DanDansen im Forum AVR Hardwarethemen
    Antworten: 15
    Letzter Beitrag: 27.11.2006, 14:22

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus