Forum: Mikrocontroller und Digitale Elektronik Timer 3 (oder 1) funktioniert nicht mit Simulator (AVR)


von Torsten (Gast)


Lesenswert?

Hallo,

ich knabbere schon geraume Zeit an einem Problem, das für mich
irgendwie keinen Sinn ergibt.
Um es hier zu beschreiben, habe ich den Code nur auf das Problem selbst
abgespeckt.

Beschreibung: Bei auslösen des externen Interupts 2 (Taster auf STK501)
soll der Timer 3 aktiviert werden...
Das wird er auch, er soll bis zum OC hochzählen.
Mein Simulator hört allerdings beim unteren OC (OCL) auf zu zählen, und
ich habe keine Ahnung, warum.

Kann mir vielleicht jemand helfen? ICh wäre seeeeeeehr dankbar, da ich
demnächst sonst hinter einen Zug springe.. ;-)



.include "m128def.inc"


.def temp1=r16

.def highValue = r24  ;definition highVariable für Endwert des 16bit
Timers (ab 26 x,y,z !!!!!!)
.def lowValue = r25    ;definition lowVariable für Endwert des 16bit
Timers

.equ highValue = 0x0f
.equ lowVvalue = 0x22
;************************************************************
;
;        Interrupts definieren

.cseg
.org 0x0000

jmp reset ; Reset Handler
jmp RETURN ; IRQ0 Handler
jmp RETURN ; IRQ1 Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp RETURN ; EXT_INT3 ; IRQ3 Handler
jmp RETURN ; EXT_INT4 ; IRQ4 Handler
jmp RETURN ; EXT_INT5 ; IRQ5 Handler
jmp RETURN ; EXT_INT6 ; IRQ6 Handler
jmp RETURN ; EXT_INT7 ; IRQ7 Handler
jmp RETURN ; TIM2_COMP ; Timer2 Compare Handler
jmp RETURN ; TIM2_OVF ; Timer2 Overflow Handler
jmp RETURN ; TIM1_CAPT ; Timer1 Capture Handler
jmp RETURN ; TIM1_COMPA ; Timer1 CompareA Handler
jmp RETURN ; TIM1_COMPB ; Timer1 CompareB Handler
jmp RETURN ; TIM1_OVF ; Timer1 Overflow Handler
jmp RETURN ; TIM0_COMP ; Timer0 Compare Handler
jmp RETURN ; TIM0_OVF ; Timer0 Overflow Handler
jmp RETURN ; SPI_STC ; SPI Transfer Complete Handler
jmp RETURN ; USART0_RXC ; USART0 RX Complete Handler
jmp RETURN ; USART0_DRE ; USART0,UDR Empty Handler
jmp RETURN ; USART0_TXC ; USART0 TX Complete Handler
jmp RETURN ; ADC ; ADC Conversion Complete Handler
jmp RETURN ; EE_RDY ; EEPROM Ready Handler
jmp RETURN ; ANA_COMP ; Analog Comparator Handler
jmp RETURN ; TIM1_COMPC ; Timer1 CompareC Handler
jmp RETURN ; TIM3_CAPT ; Timer3 Capture Handler
jmp RETURN ; TIM3_COMPA ; Timer3 CompareA Handler
jmp RETURN ; TIM3_COMPB ; Timer3 CompareB Handler
jmp RETURN ; TIM3_COMPC ; Timer3 CompareC Handler
jmp RETURN ; TIM3_OVF ; Timer3 Overflow Handler
jmp RETURN ; USART1_RXC ; USART1 RX Complete Handler
jmp RETURN ; USART1_DRE; USART1,UDR Empty Handler
jmp RETURN ; USART1_TXC ; USART1 TX Complete Handler
jmp RETURN ; TWI ; Two-wire Serial Interface Interrupt Handler

;*****************************************************************

;.cseg     ; Codesegment


reset:

;.include "stackinit.inc"

ldi temp1, high(RAMEND)
out SPH, temp1        ;Stackpointer high initialisieren

ldi temp1, low(RAMEND)
out SPL, temp1        ;Stackpointer low initialisieren

rcall port_init

lds temp1, EIMSK  ;Aktiviere ExtInt2, 1 und 0 (wichtig : EIMSK erst
auslesen mit IN!!!)
sbr temp1, 4
out EIMSK, temp1


lds temp1,EICRA  ;Fallende Flanke auf ExtInt2, 1 und 0 als Trigger
(wichtig : EICRA erst auslesen!!!)
sbr temp1, 1<<ISC21 | 0<<ISC20
sts EICRA,temp1


sei

;************************************************************

loop:

  rjmp loop



;*********************************************************************** 
*********
Timer3:

sts OCR3AH, highValue ;OutputCompare einstellen

sts OCR3AL, lowValue


;Clear timer on compare match (OCR1),
;Vorteiler 1 (CS 001) => 8 MHz Takt,
;clear timer on compare match mode (CTC) 0b00001001
;ldi temp4, Null
ldi temp1, 0b00001001 ;0<<WGM13 | 1<<WGM12 | 0<<CS12 | 0<<CS11 |
1<<CS10
sts TCCR3B, temp1



;Output compare toggle, PWM aus 0b01000000
;ldi temp3, Null
ldi temp1, 0b01000000 ;0<<COM1A1 | 1<<COM1A0 | 0<<WGM11 | 0<<WGM10
sts TCCR3A, temp1


ret



;*************************************************************
;
;        Portinit

port_init:

  ldi temp1, 0xff
  out DDRB, temp1    ;PortB als Ausgang
  out PORTB, temp1  ;alle LEDs aus .. test
  out DDRC, temp1    ;PortC als Ausgang
  out DDRE, temp1    ;PortE als Ausgang

  ldi temp1, 0xf0    ;Port D0-3 als Eingang
  out DDRD, temp1

ret


;********************************************************************
;
;          EXTERNER INTERRUPT2


EXT_INT2:


rcall Timer3        ;Timer1-Unterprogramm aufrufen (Timer einstellen und
starten)


reti

RETURN:  ;wegen Adresse zwischen 2 Interupts +2 =>2 Takte zwischen
Interupts
reti

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
Noch kein Account? Hier anmelden.