Forum: Mikrocontroller und Digitale Elektronik Interrupt CTC/compare match Genauigkeitsfrage


von Tino K. (blumengiesser)


Lesenswert?

Ich lerne grad mit dem tutorial und bisher funktioniert auch alles 
bestens. Gestern habe ich mal den 16 bit timer am ATmega 8 im compare 
match modus in betrieb genommen. es hat zwar nicht zu anfang gefunzt 
aber jetzt geht es. die frage dich ich aus dem tutoral nicht beantworen 
konnte ist folgende: Abhängig vom Systemtakt kann ich den Vorteiler und 
den Match Wert so wählen, daß ein Aufruf des Interruptes mal schneller 
oder mal langsammer erfolgt. Wenn ich Jetzt sagen wir eine Uhr bauen 
will, kann ich den Interrupt sagen wir 1000 mal ausführen lassen bis 
eine Sekunde weitergezählt wird oder mit einem anderen Teilerverhältnis 
+ Match Wert auch deutlich geringer. Was ist denn jetzt genauer? So wie 
ich das Ganze verstanden habe sollte es evtl. doch nicht das gleiche 
sein. Hat der Quarz eine Toleranz, also geht leicht zu schnell wird es 
bei vielen Takten aufaddiert. Bei wenigen nicht so stark. Wenn das 
stimmt, könnte man bei vielen Takten genauer Nachjustieren. Aber bisher 
alles Spekulation. Wer hat hier einen Tip?

von Karl H. (kbuchegg)


Lesenswert?

Tino Kühn schrieb:

> konnte ist folgende: Abhängig vom Systemtakt kann ich den Vorteiler und
> den Match Wert so wählen, daß ein Aufruf des Interruptes mal schneller
> oder mal langsammer erfolgt. Wenn ich Jetzt sagen wir eine Uhr bauen
> will, kann ich den Interrupt sagen wir 1000 mal ausführen lassen bis
> eine Sekunde weitergezählt wird oder mit einem anderen Teilerverhältnis
> + Match Wert auch deutlich geringer. Was ist denn jetzt genauer?

Kann man so nicht sagen.
Genauer ist das, wo sich die Rechnung ganzzahlig ausgeht.

> So wie
> ich das Ganze verstanden habe sollte es evtl. doch nicht das gleiche
> sein. Hat der Quarz eine Toleranz, also geht leicht zu schnell wird es
> bei vielen Takten aufaddiert. Bei wenigen nicht so stark.

Das ist zwar prinzipiell richtig, ist aber eine andere Baustelle.

In deiner ersten Frage geht es im Prinzip darum, was jetzt 'genauer' 
ist:
ob man 10 mal 100 Millisekunden wartet   oder
ob man 100 mal 10 Millisekunden wartet

und da kommt immer das gleiche raus.

Was anderes ist es, wenn du 1000 Einheiten warten willst.
Dann kannst du dich entscheiden ob du
10 mal 100 Einheiten warten willst  oder
ob du 16 mal 62 Einheiten warten willst

Da ist dann das erste besser, weil 62 * 16 eben nicht genau 1000 ergibt.


Die andere Baustelle besteht darin, dass dein Quarz eben nicht mit der 
aufgedruckten Frequenz schwingt. D.h. die ganze Rechnung, die du zb für 
12Mhz gemacht hast um Vorteiler, CTC Wert und alles andere möglichst gut 
zu berechnen, stimmt nicht, weil die Voraussetzung der 12000000 Hz schon 
gar nicht gegeben ist.

> Hat der Quarz eine Toleranz, also geht leicht zu schnell wird es
> bei vielen Takten aufaddiert. Bei wenigen nicht so stark.

Das ist letzten Endes egal.
Denn dein Quarz macht eben nicht 12000000 Schwingungen in der Sekunde 
sondern zb 12000123. Und das ist völlig unabhängig davon wie du sie 
zählst.

von Tino K. (blumengiesser)


Lesenswert?

jetzt habe ich etliche tage darüber gebrühtet und nachgedacht und ich 
glaube ich habe es verstanden.
zu meiner config: ich nutze 8Mhz. bei einem vorteiler von 64 lasse ich 
zählen bis 12500-1 und bei einem vorteiler von 256 bis 3125-1. das ist 
beides ganzzahlig und sollte 10 Hz ergeben. Beide Uhren gehen gleich 
genau.

Stimts?

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.