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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.