-
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo,
warum den Timer nach jedem Overflow neu stellen? Lasst den Timer laufen einfach laufen!
Anstatt 4x (256 - 6) zu zählen, lass den Zähler (1x 232) + (3x 256) zählen.
Stellt den Timer einmal vor und zählt in der OVF_Int Routine nur die Anzahl der Interrupts, ohne der Timer neu zu starten. Den Timer neu stellen muß man nur wenn die gewünschte Zeit erreicht wurde.
BSP:
100µs, cnt = 1000, HEX = 3E8
FF - E8 = Voreinstellwert, nach 232 Takten erfolgt er erste Oberflow. Danach erfolgen die Overflows alle 256 Takte.
3 = Anzahl 256er Overflows
Der 4. Overflow entsteht nach genau 1000 Takten = 100µs.
314 µs, HEX = C44
FF - 44 = BB = Voreinstellwert
C = Anzahl 256er Overflows
Der 13. Overflow entsteht nach genau 3140 Takten = 314 µs
Keine Umrechnungen, keine Ungenauigkeiten da der Timer weiterläuft, jede beliebige Zeit einstellbar.
Naja, das mit den Ungenauigkeiten stimmt nicht ganz. Beim Zählerstart muß (sollte) man die Zeit mit einrechnen, die man zum Voreinstellen und Zähler starten braucht. Aber das muß nur einmal sein und nicht bei jeden Overflow.
> Das hab ich nicht verstanden, man hat doch nciht mehr Zeit nur weil man einen 16 Bit Timer nimmt!?
Doch, zumindest bei langen Zeiten. Der Timer erfordert nicht alle 256 Takte die Aufmerksamkeit des Programms, sondern nur alle 65356 Takte.
Ciao,
Werner
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen