AVR Timer/Counter Compare Value

#7415575
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)

Gast #7415578
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.

#7415621
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?

#7415683
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
#7415710
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.

#7415713
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.

#7415768
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.

Gast #7416041
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren