Sinn der Sache ist es den Timer Top nach der gewünschten Periodendauer
berechnen zu lassen.
1 | #define F_CPU 16000000
|
2 | #define TIMER_PRESCALER 8
|
3 | #define SIGNAL_PERIOD 0.0025
|
4 |
|
5 | #define TIMER_TOP (SIGNAL_PERIOD/(TIMER_PRESCALER/F_CPU))
|
Da ich mir nicht ganz im Klaren bin wie der Präprozessor diese Formel
ausrechnet, und 8/16000000 für einen float etwas zu klein sein könnte,
kam ich zu folgender Alternative...
1 | #define F_CPU 16000000
|
2 | #define TIMER_PRESCALER 8
|
3 | #define SIGNAL_PERIOD 2.5
|
4 |
|
5 | #define TIMER_TOP (SIGNAL_PERIOD/((TIMER_PRESCALER*1000)/F_CPU))
|
... die auch nicht funktioniert.
Der Compiler meldet sich lediglich mit einer "Division by Zero" Warnung
und der Timer läuft mit einer Periodendauer von 32.77 ms, was einem
Timer Top Wert von 65,536 entsprechen sollte.