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!
Eine eigene Frage?
Dieser Thread ist über 21 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.