Forum: Mikrocontroller und Digitale Elektronik AVR t85 Timer: "Compare-Wert - 1" und gemessene Frequenz


von Fragesteller (Gast)


Angehängte Dateien:

Lesenswert?

Warum wird vom Timer Output Compare value häufig eine 1 abgezogen (eins, 
-1, subtrahiert, weniger)?
Ich dachte, ich hätte dazu im Datenblatt auch einen Satz gelesen - finde 
ich nicht mehr 
(http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf).
Weil der Vergleich einen Timer-Tick dauert bzw. nach einem Tick 
stattfindet?
Demnach dauert es beim Wert 0 bereits 1 Tick.
Also muss vom Sollwert (Ticks) 1 abgezogen werden.
Ja?

Mein "Problem" ist nämlich, dass die eingestellte deutlich von der 
gemessenen Frequenz abweicht.

Einstellung: 16.5e6/8/43 = 47965,11 (-> OCR0B += 42);
Gemessen: 24.542 kHz Rechteck * 2 = 49084 kHz Interruptfrequenz

Also über 2% Abweichung.
F_CPU müsste jedoch auf besser 1% eingestellt sein (micronucleus USB 
bootloader), also ca. zwischen 47490 und 48444 kHz liegen. Ich messe mit 
einem Rigol Oszilloskop.

Entweder ich bin off-by-one, die Kalibrierung ist falsch, oder ich messe 
Mist.

Ich muss wohl mal den ISP rausholen und CKOUT aktivieren zum Vergleich.

von Fragesteller (Gast)


Lesenswert?


von c-hater (Gast)


Lesenswert?

Fragesteller schrieb:

> Demnach dauert es beim Wert 0 bereits 1 Tick.
> Also muss vom Sollwert (Ticks) 1 abgezogen werden.
> Ja?

Ja.

Ist doch logisch: So ein Timer-Register ist mathematisch gesehen ein 
Divisor. Ein Divisor mit dem Wert Null wäre eine (praktisch 
unbrauchbare) Singularität.

Also vermeidet man die Sinularität (und erweitert nebenbei den 
nützlichen Wertebereich), indem man per Konvention festlegt, dass der 
tatsächliche Divisor dem Registerwert+1 entspricht. Ähnliches wirst du 
an SEHR vielen Stellen in der digitalen Elektronik finden...

von Fragesteller (Gast)


Lesenswert?

Danke für die Bestätigung.
Ich dachte, das hätte irgendwo explizit gestanden. Aber auch AVR130 
erwähnt das nirgends.
Für den CTC Mode gibt es eine Formel, in dem die 1 steckt.
Aber dann ist mein Compare-Value ja richtig, und entweder die 
Kalibrierung oder die Messung daneben. Ich vermute: ersteres.

von Fragesteller (Gast)


Lesenswert?

Ah:
> 11.5 Output Compare Unit
> The 8-bit comparator continuously compares TCNT0 with the Output Compare 
Registers (OCR0A and OCR0B).
> Whenever TCNT0 equals OCR0A or OCR0B, the comparator signals a match.
>> A match will set the Output Compare Flag (OCF0A or OCF0B) at the next timer 
clock cycle.
> If the corresponding interrupt is enabled, the Output Compare Flag generates an 
Output Compare interrupt.
> The Output Compare Flag is automatically cleared when the interrupt is executed.

von Fragesteller (Gast)


Lesenswert?

> Forensoftware
> sucht
> Programmierer

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.