Forum: Mikrocontroller und Digitale Elektronik Timer Top über #define berechnen


von Benny S. (benny_s)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

Der Präprozessor rechnet nicht, sondern gibt den Text nur an den 
Compiler weiter.

von (prx) A. K. (prx)


Lesenswert?

TIMER_PRESCALER/F_CPU ist 0, weil beides Ganzzahlen sind.

von Benny S. (benny_s)


Lesenswert?

1
#define F_CPU  16000000
2
#define TIMER_PRESCALER  8  
3
#define SIGNAL_PERIOD  0.0025  
4
5
#define TIMER_TOP      (SIGNAL_PERIOD/((float)TIMER_PRESCALER/F_CPU))

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
Noch kein Account? Hier anmelden.