Forum: Mikrocontroller und Digitale Elektronik AVR Timer/Counter Compare Value


von Georg M. (g_m)


Lesenswert?

Hallo,
ich bin etwas verwirrt. Könnte bitte jemand überprüfen, ob es 
tatsächlich diesen Unterschied zwischen den neuen und den alten AVRs 
gibt?
1
 TCA0.SINGLE.PER = 9;   // 10 clock cycles (period)
2
 TCA0.SINGLE.CMP0 = 5;  //  5 clock cycles (pulse width)
1
 OCR1A = 9;       // 10 clock cycles (period)
2
 OCR1B = 4;       //  5 clock cycles (pulse width)

(Single-slope PWM)

von Steve van de Grens (roehrmond)


Lesenswert?

Die Timer waren noch nie exakt gleich. Welche Modelle meinst du denn 
genau?

Am besten antwortest du mit Links zu deren Datenblättern, und bei der 
Gelegenheit kannst du sie auch gleich selbst lesen. Die Registernamen 
sind darin ja leicht zu finden.

: Bearbeitet durch User
von S. L. (sldt)


Lesenswert?

Ja, ist so, z.B. auf einem ATmega4809 für Tastgrad 0.5:
1
  sbi     VPORTA_DIR,0                        ; WO0
2
  puti    TCA0_SINGLE_CTRLA,1                 ; enable
3
  puti    TCA0_SINGLE_CTRLB,0b0_0_0_1_0_011   ; CMP0EN, Single-slope PWM
4
  putiw   TCA0_SINGLE_PER,9                   ; 10 clock cycles (period)
5
  putiw   TCA0_SINGLE_CMP0,5                  ;  5 clock cycles (pulse width)
Steht im Datenblatt etwas Gegenteiliges?

von S. L. (sldt)


Lesenswert?

Okay, zugegeben, mag für einen 'alten Hasen' etwas irritierend sein, ist 
aber z.B. beim TCB genauso:
1
  sbi     VPORTA_DIR,2                        ; 0-WO
2
  puti    TCB0_CTRLA,1                        ; enable
3
  puti    TCB0_CTRLB,0b0_0_0_1_0_111          ; CCMPEN, 8-Bit PWM mode
4
  puti    TCB0_CCMPL,7                        ; period
5
  puti    TCB0_CCMPH,4                        ; duty cycle 0.5

von Georg M. (g_m)


Lesenswert?

OK, danke, und was ist mit den alten AVRs?
(z.B. ATmega328P Timer/Counter1)
Ich kann im Datenblatt auch nichts darüber finden, und dennoch muss 
Compare Value um 1 kleiner sein.
Oder irre ich mich?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

die Bedeutung der Einstellungen sind ja immer ungefähr gleich. Geändert 
hat sich im Vergleich zu den alten ATmegas nur der Registeraufbau und 
eben die Namen der Register. Wenn man die alten Timer kennt, kennt man 
recht schnell die Neuen. Die App Notes "Getting Start with ..." helfen 
auch dabei.

>
1
>  TCA0.SINGLE.PER = 9;   // 10 clock cycles (period)
2
>  TCA0.SINGLE.CMP0 = 5;  //  5 clock cycles (pulse width)
3
>
>
1
>  OCR1A = 9;       // 10 clock cycles (period)
2
>  OCR1B = 4;       //  5 clock cycles (pulse width)
3
>

Der Vergleich passt insoweit schon.

von Veit D. (devil-elec)


Lesenswert?

Georg M. schrieb:
> OK, danke, und was ist mit den alten AVRs?
> (z.B. ATmega328P Timer/Counter1)
> Ich kann im Datenblatt auch nichts darüber finden, und dennoch muss
> Compare Value um 1 kleiner sein.
> Oder irre ich mich?

Dazu musst du die dir Formeln der jeweiligen Timer-Modes im Manual 
anschauen.  Dafür gibt es keine pauschale Formel für alles. Gab es 
vorher nicht und gibt es jetzt auch nicht. Die App Notes "Getting Start 
with ..." helfen auch dabei.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Veit D. schrieb:
> Dazu musst du die dir Formeln der jeweiligen Timer-Modes im Manual
> anschauen.

Oder die Beschreibung lesen und verstehen.

Oliver

von S. L. (sldt)


Lesenswert?

> ... und was ist mit den alten AVRs ... Compare Value um 1 kleiner

Ja.

von Georg M. (g_m)


Lesenswert?

Geklärt.

von S. L. (sldt)


Lesenswert?

Mit etwas Mühe lässt es sich finden, zum Beispiel:

ATmega328P Timer1:
If TCNT equals OCR1x the comparator signals a match. A match will set 
the Output Compare Flag (TIFR1.OCFx) at the next timer clock cycle.

ATmega4809 TCB 8-Bit PWM Mode:
CCMPH is the number of cycles for which the output will be driven high. 
CCMPL+1 is the period of the output pulse.

von Falk B. (falk)


Lesenswert?

Georg M. schrieb:
> Ich kann im Datenblatt auch nichts darüber finden, und dennoch muss
> Compare Value um 1 kleiner sein.

Ja, das ist aber immer noch so, auch auf anderen CPUs. Denn die Zähler 
zählen immer (meistens?) von 0-N, macht eine Periode von N+1 Takten.

von Veit D. (devil-elec)


Angehängte Dateien:

Lesenswert?

Hallo,

es kommt auch auf den Timer Mode an. ;-) Beim TCA im Dual Slope ist das 
wieder anders. Da muss ein TOP Wert von Minimum 2 beachtet werden. Ich 
hänge einmal mein Excel Rechenblatt für AVR DB ran. Enthalten ist .xls 
und .xlsx Dateiformat. Sowas Schönes habt ihr bestimmt nicht.  :-)

: Bearbeitet durch User
von S. L. (sldt)


Lesenswert?

an Falk Brunner:
Die ursprüngliche Frage war, bei welchem Wert der Compare-Match 
ausgelöst wird im Single-Slope-Modus - der muss bei den neuen AVR-Typen 
um 1 größer sein.

von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> Ja, das ist aber immer noch so, auch auf anderen CPUs. Denn die Zähler
> zählen immer (meistens?) von 0-N, macht eine Periode von N+1 Takten.

Ich glaube du hast da etwas anderes im Sinn, als worum es hier geht.

Der TO will, dass der Komparator 10 Takte nach dem Start ausgelöst wird. 
Wenn ich bei 0 anfange und dann 10x erhöhe, bin ich bei 10. Dennoch muss 
er 9 konfigurieren.

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.