Timer Overflow Interrupt AT90CAN128

OP #2866776
Lesenswert?

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
OP #2866807
Lesenswert?

Hallo Joe,

vielen vielen Dank für die tolle Hilfe. Ich bin immer wieder erstaunt, 
wie schnell einem hier geholfen wird und wie viel Wissen hier durch euch 
vereint ist. Daumen hoch.

Also, das Problem ist identifiziert. Jetzt habe ich nachgeschaut bei den 
FUSES. Ich habe diese noch nie geändert oder musste daran jemals etwas 
einstellen. Es gibt da zum einen das Häkchen bei CKDIV8 und dann 
SUT_CKSEL. Bei letzteren gibt es eine Liste wo ich den externen Quarz 
auswählen kann. Aber woher weiß ich, welchen ich da wählen muss. Ich 
habe ein externen 16MHZ Standardquarz dazu bekommen.

Danke noch einmal!
Angehängte Dateien:
OP #2866938
Lesenswert?

Hallo,

Karl Heinz Buchegger schrieb:
> High Frequency :-)
>
>
> Es gibt 3 Einstellungen
>    Low Frequency
>    Middle Frequency
>    High Frequency
>
>
> Hast du dir den bereits verlinkten Fuse Calculator nicht angesehen?
>
>
>
>     Beitrag melden Bearbeiten Löschen  Markierten Text zitieren Antwort Antwort 
mit Zitat

Ja habe ich mir angesehen. Also das es ein 16MHZ Quarz ist, weiß ich ja. 
Von daher muss ich einen 16MHZ Quarz auswählen. Die Frage war nur, ob 
ich noch etwas anderes ändern muss und welche Startup Time?
#2866944
Lesenswert?

Christoph A. schrieb:

> Ja habe ich mir angesehen. Also das es ein 16MHZ Quarz ist, weiß ich ja.
> Von daher muss ich einen 16MHZ Quarz auswählen. Die Frage war nur, ob
> ich noch etwas anderes ändern muss und welche Startup Time?

Ne, passt schon.

Startup Time kannst du dir aussuchen.
Das ist einfach nur ein Zeitversatz, nachdem der µC dann eigentlich zu 
arbeiten anfängt. Sinn der Sache: damit sich die Spannungen und die 
Taktfrequenz nach dem Einschalten erst mal stabilisieren können.

d.h. die kann am erst mal auf die längste Zeit einstellen, dann kann auf 
jeden Fall nichts mehr schief gehen. Wenn mans sowieso nicht braucht, 
kann man natürlich auch entsprechend kleinere Werte nehmen.

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