我正在为 AVR(C 语言)编写代码,以连续改变三个 PWM 通道的占空比。为此,我编写了一个函数,它以百分比形式接收一个值,并将某些寄存器设置为由百分比和定时器的 TOP 值确定的某些值。伪代码——
register = (int) (duty / 100 * timer_top);
但是,除非 duty = 100,否则这是行不通的(没有 PWM 输出)。
我尝试在 math.h 中使用 round() 函数,但这也给出了类似的输出,并使编译的文件变得不必要地大。我尝试了其他方法,例如——
register = duty / 100 * timer_top
register = (duty / 100 * timer_top) + 0.5
register = (int) (duty / 100 * timer_top) + 0.5
但没有一个工作。有人可以帮我吗?谢谢!