Tímer Interrupt Problem

OP #1087855
Lesenswert?

Habe hier dem Timer 1 beim Tiny26 programmiert und er sollte eigentlich 
wenn er bei 120 angelangt ist einen Interrupt auslösen..habe ich hier 
was vergessen ??


.include"tn26def.inc"
.def temp = r16
.def leds = r17
.org 0x0000 rjmp main
.org OVF1addr rjmp timer1_overflow

main:

ldi temp,RAMEND
out SP,temp

ldi temp, 0xFF
out DDRB,temp

ldi leds, 0xFF

ldi temp,1<<CS10
out TCCR1B, temp


ldi temp,1<<TOIE1
out TIMSK, temp

ldi temp,120    ;Interrupt bei 120
out OCR1A, temp

sei

loop: rjmp loop

timer1_overflow:
out PORTB, leds
com leds
ldi temp,0
out TCNT1,temp

reti
#1087880
Lesenswert?

Moin,
also XOR !
Du benutzt den Timer1 Overflow INT-Vektor. Setzt aber das Register 
OCR1A, welches für den CTC Modus, bzw. PWM gedacht ist.
Also entweder benutzt du dan auch den CTC Modus (würde ich tun) und 
benutzt deren INT-Vektor, oder du setzt TCNT1 entsprechend.

Gruß
OP #1087930
Lesenswert?

Hatte jetzt irgendwie das falsche Programm drinne.
Also nochmal:
Ich möchte einen vergleich mit dem OCR1A (und nicht den Timer mit dem 
Wert 120 starten) machen was ja auch geling in dem mir das Bit OCF1A im 
TIFR Register auch gesetzt wird, wenn die 120 erreicht ist. Nur wie 
werte ich das jetzt aus.
Um der Frage vorzubeugen ich habe das Programm nich in ein Projekt 
eingebunde, ich will nur die Arbeitsweise von Timer 1 im Tiny26 kennen 
lernen.

.include"tn26def.inc"

.def temp = r16
.def leds = r17

.org   0x000       rjmp main
.org  INT0addr    rjmp noch_nichts
.org  PCI0addr      rjmp noch_nichts
.org  OC1Aaddr    rjmp timer1_overflow
.org  OC1Baddr    rjmp noch_nichts
.org  OVF1addr    rjmp timer1_overflow
.org  OVF0addr    rjmp noch_nichts
.org  USI_STARTaddr  rjmp noch_nichts
.org  USI_OVFaddr    rjmp noch_nichts
.org  ERDYaddr    rjmp noch_nichts
.org  ACIaddr    rjmp noch_nichts
.org  ADCCaddr    rjmp noch_nichts

main:

ldi temp,RAMEND
out SP,temp

ldi temp, 0xFF
out DDRB,temp

ldi leds, 0xFF

ldi temp,1<<CS10
out TCCR1B, temp


;ldi temp,(1<<TOIE1)
;out TIMSK, temp

ldi temp,(1<<OCIE1B)  ;setzt jetzt OCF1A im TIFR bei MATCH
out TIMSK, temp

ldi temp,120           ;Interrupt bei 120
out OCR1A, temp

sei

loop: rjmp loop

timer1_overflow:
out PORTB, leds
com leds
ldi temp,0
out TCNT1,temp
reti

noch_nichts:
reti
OP #1088170
Lesenswert?

sooo..nachdem jetzt alles funzt..das Programm erspare ich jetzt mal, die 
Profis hier werden ja wohl wissen wie es geht (ich weiß es jetzt auch 
aber vom Profi bin ich noch meilenweit entfernt) will ich den Timer 
jetzt mal extern Takten aber so wie ich das sehe, ist das mit Timer 1 
bein Tiny26 nicht möglich...oder ??

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren