Hallo, Ich möchte eine Zeitspanne mit dem 16 bit Timer1 eines Atmega16 messen. Um den anschließenden Berechnungsvorgang effizienter zu machen würde ich die Timer Counter Register mit 0xFFFF laden und anschließend dekrementieren lassen, bis bei 0x0000 ein timeroverflow, interrupt oä kommt. Ich finde leider keine Controlregister wo man so eine Funktion aktivieren könnte. Kann mir jemand einen Tipp oder Hinweis geben, ob das Funktionieren würde? Danke! Peter
@ Peter Hintringer (peter_hi) >Ich möchte eine Zeitspanne mit dem 16 bit Timer1 eines Atmega16 messen. Dann tu das. >Um den anschließenden Berechnungsvorgang effizienter zu machen würde ich >die Timer Counter Register mit 0xFFFF laden und anschließend >dekrementieren lassen, Nicht sinnvoll. Der Timer im AVR zählt nur vorwärts, und das reicht auch. Nicht mal das Laden von einem Startwert ist nötig. Einfach den Zähler beim Start und Ende auslesen, die Differenz bilden, fertig. Was will man da optimieren?
Vermutlich denkt er, dass die Subtraktion aufwändiger sei, als die Register zu laden. Was allerdings nicht wirklich der Fall ist. Der Unterschied spielt sich wenn überhaupt in Größenordnung einzelner Takzyklen ab.
Ich messe mit der Zeitspanne eine Geschwindigkeit eines Gegenstandes. Um die Geschwindigkeit zu berechnen, lasse ich momentan den Timer hochzählen und dividiere den Wert anschließend durch die Taktfrequenz. Dabei kommt die Einheit s/m raus. Mit dem Kehrwert berechne ich dann die Einheit m/s, die ich haben will. Wenn ich den Timer mit 0xFFFF lade, runterzählen lasse und die Taktfrequenz durch den Wert dividiere hab ich gleich m/s als Einheit. @falk: Die Idee mit der Differenz ist gut! Das mach ich so. Vielen Dank!
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.