Hallo Leute,
ich habe folgendes Problem. Ich möchte in einer ISR eine Variable
hochzählen. Und zwar ca. jede Sekunde einen Zähler hoch. Dazu habe ich
folgenden Code:
1 | #include <avr/interrupt.h>
|
2 |
|
3 | int timer_ovl_cnt = 0;
|
4 |
|
5 | void timer_init()
|
6 | {
|
7 |
|
8 | TCCR3A = 0;
|
9 | TCCR3B = (1 << CS32);
|
10 | TIMSK3 = (1 << TOIE3);
|
11 |
|
12 | sei();
|
13 |
|
14 | }
|
15 |
|
16 | int main (void)
|
17 | {
|
18 |
|
19 | ctd_timer_init();
|
20 |
|
21 | while (1)
|
22 | {
|
23 | DisplayDecimal16(5, 30, timer_ovl_cnt);
|
24 | }
|
25 |
|
26 | }
|
27 |
|
28 |
|
29 | ISR(TIMER3_OVF_vect)
|
30 | {
|
31 | timer_ovl_cnt++;
|
32 | }
|
Die Ausgabe funktioniert auch. Allerdings nicht jede Sekunde einen
Schritt weiter, sondern genau alle 16s. Meine F_CPU ist 16MHZ.
Das kuriose ist, dass es genau so schon funktioniert hat in einem
anderen Programm, welches ich mit dem AVR Studio 4 geschrieben hatte.
Jetzt benutze ich das Atmel Studio 6.
Also die ISR etc scheint ja auch zu funktionieren, sonst würde die
Variable ja nicht hochzählen. Es ist halt irgendwo der Faktor 16 drin.
Aber ich weiß nicht wo. Das Programm macht zu Testzwecken im Moment nur
die eine Ausgabe. Also keine anderen Funktionen etc.
Wisst ihr vielleicht woran das liegen könnte?
Vielen Dank und viele Grüße,
Paul