-
-
Erfahrener Benutzer
Robotik Visionär
Die sache mit dem Overlay wird gemacht, um schnell den 8 Bit wert aus dem Timer 0 und den 16 Bit Wert von den gezählten Überläufen zusammenzustzen zu einer Zeit mit 24 Bit Auflösung, die dann in einer 32 Bit langen variable Steckt. Das wird gemacht statt so etwas zu schreiben wie: zeit = timer + 256 * ZahlDerÜberläufe
Die Multiplication ist ja einfach ein Verschieben um 1 Byte.
Im Prinzip kann das so funktionieren, allerdings nicht immer:
Wenn man Pech hat, gibt es gerade an Anfang in der Interruptroutine, noch vor dem Timer0 Stop einen Überlauf von Timer0. Da man sich noch in der ISR befindet wird dieÜberlauf ISR aber nicht mehr ausgeführt und der Überlaufzähler ist folglich um einen zu klein. So wie es aussieht ist das bei dem Beispielwert für 1s passiert, sonst wäre der Fehler nicht so groß. Wenn man will könnte man den Fall noch abfangen, indem man das Interruptflag abfragt.
Für eine wirklich genaue Messung sollte man aber lieber Timer1 und die ICP-Funktion nutzen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen