www.mikrocontroller.net

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


Autor: Patrick F. (Firma: AISLER B.V.) (helipaddi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jürgen Berger (hicom)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jasper (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick F. (Firma: AISLER B.V.) (helipaddi)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: chridre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.