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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Fragesteller (Gast)


Angehängte Dateien:
  • preview image for -1.png
    -1.png
    44,3 KB, 29 Downloads

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

von c-hater (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
> Forensoftware
> sucht
> Programmierer

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.