Counter/Timer Problem bei AVR

OP #1353362
Lesenswert?

Hi Leute,

bin im Moment ein bisschen mit dem Timer/Counter vom AVR rum am 
probieren. Dabei habe ich als Teiler 1024 genommen bei einem Takt von 
3686400 Hz (Vom STK 500 vorgegeben). Das bedeutet doch, dass der 
Overflow Interrupt jetzt 3600 mal in der Sekunde aufgerufen würd?
Davon ausgehen habe ich in der Overflow Routine einen Counter der bis 
3600 Zählt und dann den Sekunden Zähler um eins erhöht.

Doch irgendwo ist ein Denkfehler drin. Die LEDs blinken viel zu langsam. 
Er wenn ich den Counter auf 4 (!) stelle blinkt es ca. im Sekundentakt.

Wisst ihr was ich falsch mache???
Danek für eure Hilfe!

Gruß,
Patrick
#1353368
Lesenswert?

Patrick Franken schrieb:
> Hi Leute,
>
> bin im Moment ein bisschen mit dem Timer/Counter vom AVR rum am
> probieren. Dabei habe ich als Teiler 1024 genommen bei einem Takt von
> 3686400 Hz (Vom STK 500 vorgegeben). Das bedeutet doch, dass der
> Overflow Interrupt jetzt 3600 mal in der Sekunde aufgerufen würd?

nein

abgesehen davon liegt dein Problem in Zeile 42, wie immer...
Gast #1353382
Lesenswert?

>Das bedeutet doch, dass der
>Overflow Interrupt jetzt 3600 mal in der Sekunde aufgerufen würd?

Nein. Das bedeutet, das der Timer 3600 mal pro Sekunde um eins erhöhht 
wird. Der Overflow Interrupt kommt erst, wenn der Timerwert "überläuft", 
bei den 8-Bit-Timern nach 256 Schritten, bei den 16-Bit-Timern nach 
65536.

Oliver
Gast #1353384
Lesenswert?

Hi

also wenn du einen Takt von 3686400 mit einem Prescaler von 1024 teilst 
bekommst du zwar ein Ergebnis von 3600.

Dieses Ergebnis sind jedoch nur die Anzahl der Takte, die in der Sekunde 
ausgeführt werden.
Wenn du zum Beispiel einen 8-Bit Counter verwendest, bekommst du ca. 14 
Overflows da:

3600 / 256 = 14,06...
(2^8 = 256)

Wenn du aber einen 16-Bit Counter hast bekommst du nicht mal ein 
Overflow in der Sekunde, da:

3600 / 65536 = 0,0549...
(2^16 = 65536)

Ich hoffe das stimmt soweit, aber bitte verbessert mich fals ich was 
falsches sage(hab Timer und Counter auch erst vor kurzem verstanden).

Gruß
jasper
Gast #1353388
Lesenswert?

3686400/1024 = 3600 1/s oder anderst gesagt 3600 Takte pro Sekunde!

Ein 16bit Timer hat 2^16 stellen entsprich 65536 das bedeuter er kann 
zählen von 0-65535 Zählereinheiten

pro sekunde werden 3600 1/s Zählereinheiten dazu gezählt oder man sagt 
der Timer wird Inkrementiert mit einer Frequenz von 3600 Hz.

65536 / 3600 1/s = 18,20 sekunden benötigt er um ein overflow zu 
erzeugen.

Bei einem 8bit Timer

8^2 = 256
Timer zählt von 0-255
256/3600 = 71.111 ms
Overflow alle 71.11 ms oder bessere gesagt 14.06 Overflow pro Sekunde!!

MFG
Chridre

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