This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我正在尝试使用 Timer_A 来使用 PWM 来运行逐渐衰减的 LED。 这是我第一次使用此板上的计时器、我在使其正常工作时遇到了问题。 你们能告诉我我我出了什么问题吗? 感谢您提前观看。 到目前为止、我的代码如下:
#include void _delay_ms (volatile unsigned int length){ volatile unsigned int delay = 0; for (delay = 0;delay < length;delay++){ _delay_cycles (1000); } } int main (void){ WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 P1DIR |= BIT0; P1SEL |= BIT0; TA0CCR0 = 1000-1; TA0CCTL1 = OUTMOD_7; TA0CCR1 = 0; TA0CTL = tassel_1 + MC_1; volatile signed int i = 0; while (1){ 对于(i = 1;i < 999;i += 10){ TA0CCR1 = I; _delay_ms (10); } 对于(i = 999-1;i > 0;i -= 10){ TA0CCR1 = I; _delay_ms (10); } }
1) 1)您正在对 TA0.1进行编程、但这在 P1.2上完成 、而不是 P1.0上完成。 [参考数据表(SLAS590N)表6-46]。 最简单的解决方法可能是在 P1.2引脚上添加"P1SEL |= BIT2;"和跳线 JP8 (LED 侧)。
2) 2)您的 PWM 周期为1000/32768=30.5ms、因此您每周期将 CCR1更改三次。 这将是一种工作方式、但您可能会看到干扰。 我建议设置 CCR0=32768/100=328 (10ms 延迟->100Hz)。
[编辑:添加了参考。]
好建议、谢谢! 我已按如下方式更新代码并将 JP8跳线至 P1.2:
#include void _delay_ms (volatile unsigned int length){ volatile unsigned int delay = 0; for (delay = 0;delay < length;delay++){ _delay_cycles (1000); } } int main (void){ WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 P1DIR |= BIT2; P1SEL |= BIT2; TA0CCR0 = 350; TA0CCTL1 = OUTMOD_7; TA0CCR1 = 0; TA0CTL = tassel_1 + MC_1; volatile signed int i = 0; while (1){ 对于(I = 1;I < 309;I += 5){ TA0CCR1 = I; _delay_ms (50); } 对于(I = 309-1;I > 0;I -= 5){ TA0CCR1 = I; _delay_ms (50); } }
这些变化使我得到了平滑衰减、几乎只需3秒、然后是平滑衰减、几乎需要3秒。 非常感谢你的帮助。
我将注意到、我偶尔会看到 LED 出现小闪烁。 我不确定是什么原因导致了这种情况。