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/MSP430F5419A:LED 闪烁

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP430F5419A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/693056/ccs-msp430f5419a-led-flickering

器件型号:MSP430F5419A

工具/软件:Code Composer Studio

您好!

我正在进行脉 宽调制、以实现 RGB LED 中的衰减效果。 我将使用 MSP430f5419A 的计时器 B。 LED 在褪色时有时闪烁。 我将在红色、绿色和蓝色之间交替显示颜色、我将以1kHz 的频率执行 PWM。 RGB 灯的工作电压为12伏、我 将使用自己的电源电路 。 问题可能出在哪呢? 以下是代码:  

#include <msp430f5419a.h>
void main (void)

WDTCTL = WDTPW + WDTHOLD;//为方便起见,禁用看门狗计时器。
P4DIR |=(BIT2 + BIT3 + BIT6);//将引脚4.2、4.3和4.6设置为输出方向。

/*** Timer B 设置***/
TBCCR0 = 1000;//在 Timer B 捕获/比较0寄存器中将周期设置为1000us。
TBCCTL2 = OUTMOD_7;
TBCCTL3 = OUTMOD_7;
TBCCTL6 = OUTMOD_7;
TBCTL = TBSSEL_2 + MC_1;//TBSSEL_2选择 SMCLK 作为时钟源、MC_1告诉它向上计数到 TBCCR0中的值。
while (1)

int x、z、y;
//红光下的褪色效应
对于(z = 0;z < 1000;z = z + 5)

TBCCR6 = z;
P4SEL = BIT6;
_DELAY_CYCLES (50000);

对于(z = 1000;z > 0;z = z - 5)

TBCCR6 = z;
P4SEL = BIT6;
_DELAY_CYCLES (50000);


//绿色光中的褪色效应
对于(y = 0;y < 1000;y = y + 5)

TBCCR3 = y;
P4SEL = BIT3;
_DELAY_CYCLES (50000);

对于(y = 1000;y > 0;y = y - 5)

TBCCR3 = y;
P4SEL = BIT3;
_DELAY_CYCLES (50000);


//淡蓝色光中的 eefect
对于(x = 0;x < 1000;x = x + 5)

TBCCR6 = x;
P4SEL = BIT2;
_DELAY_CYCLES (50000);

对于(x = 1000;x > 0;x = x - 5)

TBCCR6 = x;
P4SEL = BIT2;
_DELAY_CYCLES (50000);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > TBCCR6 = x;
    >P4SEL = BIT2;
    这看起来像是一个错误。 您正在启用 TB0.2、但正在操作 TB0.6。 我希望序列仅停止20秒(60秒之外)、但这可能会构成"闪烁"?
    无论如何、将第一行替换为以下内容(2种情况)、看看它是否不同:
    > TBCCR2 = x;

    未经请求:设置 P4SEL 后、它将保持设置状态、因此您只需在序列的第一个循环之前设置一次。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include
    #include
    #include

    void main (void)

    WDTCTL = WDTPW + WDTHOLD;//为方便起见,禁用看门狗计时器。
    unsigned int x;

    P4DIR |= BIT2;

    /*** Timer0_A 设置***/
    TBCCR0 = 1000;//在 Timer B 捕获/比较0寄存器中将周期设置为1000us。
    TBCCTL2 = OUTMOD_7;
    TBCTL = TBSSEL_2 + MC_1;//TBSSEL_2选择 SMCLK 作为时钟源、MC_1告诉它向上计数到 TBCCR0中的值。

    _enable_interrupt ();
    while (1)

    对于(x = 10;x < 1000;x = x + 5)

    TBCCR2 = x;
    P4SEL |= BIT2;
    _DELAY_CYCLES (50000);


    对于(x = 1000;x > 10;x = x - 5)

    TBCCR2 = x;

    _DELAY_CYCLES (50000);





    即使我只对一个 LED 执行调光效果、它在衰减时闪烁、问题可能出在哪里?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有您的设备、但当我构建类似的东西时、我看不到任何闪烁。 我的 LED 可能不够亮。

    也就是说、您可以尝试使用 CLLD 位:
    > TBCCTL2 = OUTMOD_7 | CLLD_1;//复位/置位、在 EQU0重新加载

    CLLD 功能提供与计时器的同步、并可避免异常周期。 我不希望这些异常在1kHz 时可见、但这样做最坏的情况下应该是无害的。