【发布时间】:2013-04-16 08:45:41
【问题描述】:
我正在为 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
但没有一个工作。有人可以帮我吗?谢谢!
【问题讨论】:
-
只是确保:您的意思是 (duty/100)*timer_top 还是 (duty/timer_top)*100?
-
duty和timer_top的类型是什么?他们的价值观是什么?请记住,如果duty是一个整数并且小于100,那么duty / 100将为零。 -
这显然不是你的实际代码,因为它不会编译......请在提问时尽量准确,我们越猜越难。