Forum: Mikrocontroller und Digitale Elektronik CTC-Modus & Phasenverschiebung


von cedric (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

Z.B. mit CTC, Toggle-On-Compare-Match, OCRA=4 und OCRB=1 sähe es so aus:
1
TCNT  ... 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 ...
2
3
           ---------           ---------           -
4
OCA       |         |         |         |         |
5
         -           ---------           ---------
6
7
               ---------           ---------
8
OCB           |         |         |         |
9
         -----           ---------           -------

Ich vermute mal, das ist es, was er mit "Phasenverschiebung im 
Timer/Counter Modus CTC" meint.

von cedric (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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'.

von Stefan E. (sternst)


Lesenswert?

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).

von cedric (Gast)


Lesenswert?

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!

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.