Guten Tag zusammen
Ich habe eine kurze Verständnisfrage, die mir vielleicht jemand
beantworten kann. Wie im Betreff geschrieben, geht es um die
Phasenverschiebung im Timer/Counter Modus CTC, genauer um den 16-Bit
Timer beim ATmega162.
Als Beispiel:
Timer Modus Nr. 4 (CTC, TOP = OCRnA)
OCRnA = 2000
OCRnB = 500
Frage:
Bedeutet das in diesem Fall, dass der PinB des Timers erst einschaltet,
wenn der Timer bis 2000 gezählt hat, dann wieder bei 0 beginnt und
schlussendlich bei 500 ankommt? Aus dem Datenblatt konnte ich das leider
nicht herauslesen.
Ich hoffe, ich konnte das Problem mehr oder weniger verständlich
beschreiben.
Danke für die Antworten.
cedric schrieb:> Timer Modus Nr. 4 (CTC, TOP = OCRnA)>> OCRnA = 2000> OCRnB = 500>>> Frage:>> Bedeutet das in diesem Fall, dass der PinB des Timers erst einschaltet,> wenn der Timer bis 2000 gezählt hat, dann wieder bei 0 beginnt und> schlussendlich bei 500 ankommt? Aus dem Datenblatt konnte ich das leider> nicht herauslesen.
Der B-Kanal des Timers hat nichts mit dem CTC Modus zu tun.
Du kannst natürlich da einen Compare Match zusätzlich drauf legen (*).
Aber erst mal interessiert sich der CTC Modus ausschliesslich für den
A-Kanal, also OCRnA
(*) Und Compare Match bedeutet, wann immer der Timerwert mit dem OCRnX
Register übereinstimmt, wird eine Aktion ausgelöst. Es spielt dabei
keine Rolle wie der Timer zählt. Sobald die Übereinstimmung da ist, ist
das ein Compare Match. Und dann passiert, was auch immer du für diesen
Fall konfiguriert hast.
A und B sind hier also 2 völlig verschiedene Paar Schuhe. Ihre einzige
Gemeinsamkeit ist, dass sie dasselbe Timer-Zählregister benutzen um ihre
konfigurierten Aktionen auszulösen. Wobei beim OCRnA durch den gesetzten
CTC Modus dann auf jeden Fall noch ein Zurücksetzen des Zählregisters
auf 0 dazu kommt.
Vielen Dank für die schnellen Antworten.
Ich glaube langsam verstehe ich auch den CTC Modus, danke :)
Noch eine letzte Frage:
OCRnB muss ja <= (kleiner-gleich) OCRnA sein, weil sonst bei OCRnB kein
Compare Match entsteht. Soll also bedeuten, dass der PinB dem PinA immer
voreilt oder, wenn die Register gleich sind, beide symmetrisch schalten?
cedric schrieb:> Noch eine letzte Frage:>> OCRnB muss ja <= (kleiner-gleich) OCRnA sein, weil sonst bei OCRnB kein> Compare Match entsteht.
Genau.
Wobei das den Timer selbst nicht interessiert. Das ist etwas wofür du
sorgen musst.
> Soll also bedeuten, dass der PinB dem PinA immer> voreilt
Jein. Hinkt der Minutenzeiger einer Uhr dem Sekundenzeiger um 50
Sekunden nach, oder ist er ihm 70 Sekunden vorraus? (Zu einer bestimmten
Uhrzeit)
Dadurch dass es sich um zyklische Vorgänge handelt, ist es
Definitionssache, wer jetzt vorraus und wer nachhinnkt. Zudem muss es ja
nicht so sein, dass beim Toggeln beide Pins gleichartig den Zustand
wechseln. Du musst das 'A und B sind voneinander unabhängig' ernst
nehmen. Ob OCB beim Toggeln von 0 auf 1 wechselt oder von 1 auf 0 hängt
ausschliesslich vom vorhergehenden Zustand DIESES Pins ab. In welchem
Zustand OCA ist, ist völlig unerheblich. Im oben gezeigten Beispiel ist
es so, dass beide gleich schalten. Kann so sein, muss aber nicht. Einmal
den Compare Match für B abschalten und die beiden sind 'gegengleich'.
cedric schrieb:> Soll also bedeuten, dass der PinB dem PinA immer> voreilt
Nö. Du kannst ja auch einem der Pins einen anderen Ausgangszustand geben
(z.B. per Force-Compare-Match), dann eilt PinB nach (mein "Bild" oben
illustriert ja genau diesen Fall).
Karl Heinz Buchegger schrieb:> Jein. Hinkt der Minutenzeiger einer Uhr dem Sekundenzeiger um 50> Sekunden nach, oder ist er ihm 70 Sekunden vorraus?
Sehr gutes Beispiel :)
Ich werde mich noch damit beschäftigen und sehen was sich alles machen
lässt. Aber ich denke es sollte soweit alles geklärt sein.
Vielen Dank für die Antworten und einen schönen Abend!
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.