Forum: Mikrocontroller und Digitale Elektronik Counter/Timer Problem bei AVR


von Patrick (helipaddi)


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

von Justus S. (jussa)


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...

von Jürgen B. (hicom)


Lesenswert?

damit definierst du nur die Eingangsfrequenz des Timers.
Je nach Timer 16/8 bit kommt der Overflow nach 2^8 oder 2^16 Takten

Jürgen

von Oliver (Gast)


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

von jasper (Gast)


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

von Patrick (helipaddi)


Lesenswert?

Ahhh, da war der Fehler! Der Overflow tritt dann nur 14,0625 mal in der 
Sekunde auf.
Werde heute abend den Counter in der Interrupt Routine mal auf 14 
stellen. Habe aber in Erinnerung, dass das immer noch zu langsam ist...

von chridre (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.