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? :-)
"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
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?
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 ;-)
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."
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 ;-)
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.
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.
Doch, zwischen AT90 und ATmega (ohne 103 und ggf. 163) ist das geändert worden.
Öh Flo : Hast Du bei AVRFreaks keine hinreichend schöne Antwort bekommen ? ;-) MfG, Khani
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.
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
So viel Einfluß haben die compat Fuses meiner Meinung nach nicht. ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.