Forum: Mikrocontroller und Digitale Elektronik Timer - Output Compare Mode


von Flo (Gast)


Lesenswert?

In sämtlichen Timer-Tutorials, die ich kenne, wird beim Output Compare
Mode beispielsweise für einen 1sec-Timer bei 8MHz und Prescaler 256,
31250 in OCR1A geschrieben (8000000/256=31250). Da aber der Timer bei 0
und nicht bei 1 zu zählen anfängt, wäre doch 31249 richtig, oder?
Schließlich dauert es 31251 Timer-Zyklen, bis er von 0 bis 31250
gezählt hat. Oder liegt da bei mir ein Denkfehler vor? :-)

von Roc (Gast)


Lesenswert?

Du hast vollkommen recht: OCR1A=Quarzfreq./Prescaler-1

von Peter D. (peda)


Lesenswert?

"Oder liegt da bei mir ein Denkfehler vor? :-)"

Ja.

Der Übertrag von 31250 nach 0 erfolgt in einem Zyklus. Ohne Vorteiler
müßte man diesen Zyklus abziehen.

Mit Vorteiler kommte jedoch der nächste Zählimpuls erst 256 Zyklen
später, deshalb muß man diesen Zyklus nicht abziehen.

Man hat also:

256 Zyklen: 31249
  1 Zyklus: 31250
255 Zyklen: 00000
256 Zyklen: 00001
usw.


Peter

von Flo (Gast)


Lesenswert?

Wenn der Timer sich so verhält, wie du es beschreibst, dann hätte er
doch aber einen "Schluckauf"? Schließlich sind die Zyklus-Abstände
zwischen den Schritten 31250-00000-00001 dann nicht konstant, oder?

von Flo (Gast)


Lesenswert?

Ich habe das ganze mal im AVR-Studio simuliert, der Timer springt
nicht in einem Zyklus von 31250 auf 0. Die Aussage von Peter scheint
also nicht korrekt zu sein. Trotzdem wäre mir eine dritte Meinung noch
ganz recht ;-)

von Flo (Gast)


Lesenswert?

Und um das ganze noch zusätzlich zu verkomplizieren, sagt die
Simulator-Hilfe:

"When set up to toggle on overflow, OC1A toggles immediately in the
simulator whereas in silicon it will wait for the timer to roll over to
0x0000. This has been verified for ATmega8, but may be experienced with
other parts."

von Khani (Gast)


Lesenswert?

Um das Thema totzuschlagen (zumindest auf dem Mega8) schaut einmal ins
datasheet vom Mega8. Dort findet sich auf Seite 87 Mitte eine Formel.
Diese Formel bestätigt den ersten Post hier im Thread. Sie berechnet
die Frequenz, welche sich für verschiedene Einstellungen des
Compare-Match-Wertes bei verschiedenen Prescaler-Einstellungen.

MfG, Khani

P.S.: Die meisten Antworten stehen im Datenblatt - nur nicht immer da,
wo man denkt ;-)

von Flo (Gast)


Lesenswert?

Auf die Idee mit dem Datenblatt bin ich auch gerade gekommen :-)Beim
8515 steht es tatsächlich so drin wie von Peter beschrieben, scheint
also wirklich ein Bug im Simulator zu sein.

von Flo (Gast)


Lesenswert?

Warum dann die Formel im Mega8-Datenblatt wiederum die erste Annahme
bestätigt, verstehe ich nun allerdings auch nicht... ich kann mir
eigentlich nicht vorstellen, dass das Timerverhalten in der Hinsicht
einfach geändert wurde.

von Jörg Wunsch (Gast)


Lesenswert?

Doch, zwischen AT90 und ATmega (ohne 103 und ggf. 163) ist das
geändert worden.

von Khani (Gast)


Lesenswert?

Öh Flo : Hast Du bei AVRFreaks keine hinreichend schöne Antwort bekommen
? ;-)

MfG, Khani

von Flo (Gast)


Lesenswert?

Offensichtlich nicht ;-) In
http://www.atmel.com/dyn/resources/prod_documents/doc2519.pdf ist das
unterschiedliche Timerverhalten ausführlich erklärt... beim ATmega ist
meine Annahme im ersten Posting korrekt, beim AT90S nicht. Ich frage
mich nur, wieso das von keinem der diversen Timer-Berechungstools
(AVRcalc usw.) berücksichtigt wird.

von Peter D. (peda)


Lesenswert?

Damits nun völlig konfus wird:

Wie verhält sich der Timer T1 mit Vorteiler des ATMega8515 bei
gesetzter Compatibilitäts-Fuse ?

Bzw. beim Mega128 im Mega103-Mode ?


Peter

von Flo (Gast)


Lesenswert?

Das würde mich nun allerdings auch interessieren :-)

von Jörg Wunsch (Gast)


Lesenswert?

So viel Einfluß haben die compat Fuses meiner Meinung nach nicht. ;-)

von Flo (Gast)


Lesenswert?

Habe mal beim Support nachgefragt... die meinen, das sei ein
"'non-conflicting' enhancement".

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.