Guten Tag,
ich programmiere zur Zeit einen ATmega48, mit einem Counter und einem
Timer, Ziel ist es bisher zu messen, wie lange bei einer
Eingangsfrequenz, der Port auf High ist, der Counter wird bei steigender
Flanke gestartet und bei fallender Flanke gestoppt.
Bisher habe ich sollche Werte:
-----------------Presc ^= 0 --------------------------------
6185~ ^= 100ms //Gezählte Schritte / Tatsächliche Zeit
624~ ^= 10ms
53~ ^= 1ms
4~ ^= 100µs
-----------------Presc ^= 8 --------------------------------
7820~ ^= 1s
773~ ^= 100ms //Gezählte Schritte / Tatsächliche Zeit
29~ ^= 10ms
4~ ^= 1ms
1~ ^= 100µs
-------------------------------------------------------------
Das ~ Zeichen schreibe ich dahin, weill das Ergebnis, bei gleich
bleibender Frequenz immer um +-1 bis 6 variiert. Bei hohen Werten macht
das nichts aus, sobald ich allerdings genauer werde, wird's ungenau.
Niedriger kann ich mit dem Presc. nicht gehen, daher hatte ich bisher 2
Ideen:
1) Compare Match, ich lasse den Timer einfach früher mit dem Compare
Match auslösen(Normalerweise wird dieser ja nur alle ... 256 Schritte
ausgelöst), und bekomme so mehr Ergebnisse ~> genauer
2) Ich nehme immer 10 Werte in einer Variable und teile durch 10
(Durchschnitt), so habe ich genauere oder zumindest gleich bleibendere
Werte. Denn sobald ich unter 1 ms Genauigkeit bin, wird's ziemlich
ungenau.
Wie würdet ihr das ganze lösen?
Ps: Ich bevorzuge Lösungsansätze und Ideen, auf deren Grundlage ich mich
dan selber einarbeiten kann.
mfg - Johannes