Failed to account for PWM prescaler on high frequencies.

pull/1138/head
Steven Cooreman 2015-06-01 11:37:34 +02:00
parent d49d21cdca
commit 51518f0d4c
1 changed files with 2 additions and 2 deletions

View File

@ -139,7 +139,7 @@ void pwmout_write(pwmout_t *obj, float value)
value = 1; value = 1;
} }
float pulse_period_in_s = obj->period_cycles / (float) pwm_clockfreq; float pulse_period_in_s = obj->period_cycles / ((float) (pwm_clockfreq >> pwm_prescaler_div));
pwmout_pulsewidth(obj, value * pulse_period_in_s); pwmout_pulsewidth(obj, value * pulse_period_in_s);
} }
@ -192,7 +192,7 @@ void pwmout_period_us(pwmout_t *obj, int us)
void pwmout_pulsewidth(pwmout_t *obj, float seconds) void pwmout_pulsewidth(pwmout_t *obj, float seconds)
{ {
obj->width_cycles = pwm_clockfreq * seconds; obj->width_cycles = (uint32_t) (((float) (pwm_clockfreq >> pwm_prescaler_div)) * seconds);
TIMER_CompareBufSet(PWM_TIMER, obj->channel, obj->width_cycles); TIMER_CompareBufSet(PWM_TIMER, obj->channel, obj->width_cycles);
} }