Forum: Compiler & IDEs Timer / Counter - Frage


von Johannes L. (johannes_l37)


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

Das Zauberwort heisst Input Capture.

Oliver

von Johannes L. (johannes_l37)


Lesenswert?

Ich lese mich da grade mehr oder minder ein, der Interrupt sollte so 
aussehen:
1
ISR( TIMER1_CAPT_vect )
2
{
3
4
}
Meine Frage ist, wann wird dieser Interrupt ausgelöst? Ist das je nach 
Einstellung,
1
TCCR1B |= (1<<ICES1) | (1<<CS10) ;//Steigende Flanke löst IC aus +No Presc.
bei steigender oder fallender Flanke?
1
(1<<ICES1
~> Steigende,
1
(0<<ICES1)
 ~> Fallende.
(würde das normalerweise jetz ausprobieren, aber hab den ATmega grad 
nicht hier)
weiter lesen geh

von Oliver (Gast)


Lesenswert?

Johannes L. schrieb:
> Meine Frage ist, wann wird dieser Interrupt ausgelöst? Ist das je nach
> Einstellung,

Ja.


Johannes L. schrieb:
> weiter lesen geh

Gute Idee ;)

Oliver

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.