Hallo Leute,
ich hab' ein Prob mit dem Timer/Counter2 bei meinem ATmega8. Bei der
Simulation im AVR-Studio wird zwar der Interrupt beim Compare-Match
aufgerufen, nicht aber der Overflow-Handler. Ich hab' mal geguckt, was
mit dem TOV2-Bit passiert, wenn es einen Überlauf gibt und siehe da - es
wird auch nicht gesetzt. Woran kann sowas liegen? Auch wenn ich das
Programm auf den µC lade scheint der Interrupt nicht aufgerufen zu
werden.
Hier mal den relevanten Code:
1
.org 0x0000 ;Kommt ganz an den Anfang des Speichers
2
rjmp RESET ;Interruptvektoren überspringen
3
;und zum Hauptprogramm
4
rjmp EXT_INT0 ;IRQ0 Handler
5
reti ;rjmp EXT_INT1 ;IRQ1 Handler
6
rjmp TIM2_COMP ;Timer2 Compare Handler
7
rjmp TIM2_OVF ;Timer2 Overflow Handler
8
9
10
;--- weiteres Zeugs ---
11
12
13
RESET:
14
15
;Stackpointer initialisieren
16
ldi temp, LOW(RAMEND)
17
out SPL, temp
18
ldi temp, HIGH(RAMEND)
19
out SPH, temp
20
21
;Interrupt 0 bei steigender Flanke aufrufen
22
ldi temp, 1 << ISC00 ^ 1 << ISC01
23
out MCUCR, temp
24
;Interrupt 0 aktivieren
25
in temp, GIMSK
26
sbr temp, 1 << INT0
27
out GIMSK, temp
28
29
;Timer/Counter2 wird als PWM-Generator für den Motor verwendet
30
(Vorteiler auf 1024)
31
ldi temp, 1 << WGM21 ^ 1 << CS21 ^ 1 << CS22
32
out TCCR2, temp
33
34
;Bei wahrem Vergleich und Überlauf einen Interrupt auslösen
Es geht entweder CTC-Mode oder Overflow.
Dein "Compare Match" heißt ja "Clear Timer On Compare Match".. er
kann also nie überlaufen, da er immer resettet wird.
Deswegen kanns nur den OCR-IRQ geben.
Axo, na wenn ich das gewusst hätte... Hab's jetzt gerade auf
Normal-Mode umgestellt und jetzt klappt's freu. Irgendwie hab' ich
das einfach falsch verstanden, was im Datenblatt steht... Naja, jetzt
tut's ja!
Danke dir!