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.

[参考译文] CCS/MSP430F5529:使用 PWM 和内置计时器来使 LED 淡入

Guru**** 2039030 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/948036/ccs-msp430f5529-using-pwm-and-built-in-timers-to-fade-led

器件型号:MSP430F5529

工具/软件: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 出现小闪烁。  我不确定是什么原因导致了这种情况。