Counter/Timer Problem bei AVR

OP #1353362
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
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
>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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.