Zylonenauge umverpackt
Ziel eine Klasse entwickeln, die die Hardware komfortabel wegabstrahiert.
Beispiel Arduino: wiring.c
Timer0 CTC-ISR jede 1ms
F_CPU gibt die eingestellte Frequenz vor.
F_CPU | Taktzahl | Vorteiler | TZ/VT | OCR0A | Korrekturfaktor |
---|---|---|---|---|---|
1MHz | 1000 | 8 | 125 | 124 | |
2MHz | 2000 | 8 | 250 | 249 | |
4MHz | 4000 | 64 | 62,5 | 62 | 1/2 |
6MHz | 6000 | 64 | 93,75 | 93 | 1/4 |
8MHz | 8000 | 64 | 125 | 124 | |
16MHz | 16000 | 64 | 250 | 249 | |
20MHz | 20000 | 256 | 78,125 | 78 | 7/8 |
Durch Korrekturfaktoren kann für alle Frequenzen eine gute 1ms Zeitbasis mit Timer0 erreicht werden. Beispiel 4MHz: Die ISR müsste nach 62,5 Schritten ausgelöst werden. Wenn OCR0A auf 62 eingestellt wird passiert die ISR nach 63 Schritten, ein halber Schritt zu spät. Die Milisekunden würden zu langsam gezählt werden. Deshalb der Korrekturfaktor 1/2: Jeden zweiten Durchlauf eine ms dazuzählen.
Stimmt die Überlegung oder liegt ein Denkfehler vor?
Timer0 kann auch für die Anzeige im Zeitmultiplexverfahren verwendet werden.