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.

[参考译文] LP55231:使用引擎时看似不受控制的 LED 行为

Guru**** 2502205 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1557857/lp55231-seemingly-uncontrolled-led-behavior-using-engines

部件号:LP55231


工具/软件:

我将三个序列编程到存储器中。 我使用一个引擎来运行每个序列(不能同时运行)。  

  • 使用 D1、D2 和 D7 的脉动白色程序
  • 稳定白色程序(再次,D1、D2 和 D7)
  • 闪烁橙色程序(仅限 D2 和 D7)

序列独立工作(当所有输出都关闭时测试)、但当从脉动或实心序列切换到闪烁时、映射似乎受阻。

有时蓝色 LED (D1) 亮起、红色闪烁(使蓝色 — 品红色-蓝色 — 品红色...)、有时红色 (D2) 和绿色 (D7) 闪烁、蓝色熄灭(与预期一致!)。 这种行为对我来说很随意。

以下是我的代码:

uint8_t mapping_sequence[] = {
    // Mapping describing which output channels to use (stored in page 0)
    0x00, 0x43, // White (Red D2 + Blue D1 and Green D7)
    0x00, 0x02, // Red D2 (used for orange)
    0x00, 0x40, // Green D7 (used for orange)
};

uint8_t pulsating_white_sequence[] = {
    // Pulsating white program (stored in page 1)
    0x9F, 0x80, // Set mapping to instruction 0
    0x40, 0x00, // PWM off (all LEDs)
    0x40, PULSATING_PWM_HIGHEST, // PWM on
    PULSATING_CYCLES_PER_STEP | 0x01, PULSATING_PWM_STEPS, // Ramp down
    PULSATING_WAITING_CYCLES | 0x40, 0x00, // Wait
    PULSATING_CYCLES_PER_STEP, PULSATING_PWM_STEPS, // Ramp up
    0xA0, 0x03, // Jump to instruction 3
};

uint8_t solid_white_program[] = {
    // Solid white program (stored in page 2)
    0x9F, 0x80, // Set mapping to instruction 0
    PULSATING_CYCLES_PER_STEP, PULSATING_PWM_STEPS, // Ramp up (smooth transition from pulsing)
};

uint8_t blinking_orange_sequence[] = {
    // Blinking orange program (stored in page 3)
    0x9F, 0x80, // Set mapping to instruction 0
    0x40, 0x00, // PWM off (all LEDs)
    0x9F, 0x81, // Set mapping to instruction 1
    0x40, 0x00, // PWM off (Red)
    0x9F, 0x82, // Set mapping to instruction 2
    0x40, 0x00, // PWM off (Green)
    BLINKING_WAITING_CYCLES | 0x40, 0x00, // Wait
    0x9F, 0x81, // Set mapping to instruction 2
    0x40, PWM_RED_ORANGE_BLINKING, // PWM on
    0x9F, 0x82, // Set mapping to instruction 3
    0x40, PWM_GREEN_ORANGE_BLINKING, // PWM on
    BLINKING_WAITING_CYCLES | 0x40, 0x00, // Wait
    0xA0, 0x02, // Jump to instruction 2
};

红色和绿色单独映射(变为橙色)的原因是、我希望两者的 PWM/亮度值可以单独管理、从而完全控制所看到的颜色。

我的代码有问题、我的代码是坏做法还是有问题?

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

    尊敬的 Laura:

    您有 3 个序列、 橙色闪烁程序仅控制 D2 和 D7。 所以我想 d1 的状态取决于它在序列时刻的状态。 您可以进行一些实验来仔细检查:

    1.从 白色稳定程序切换到橙色闪烁程序,D1 应始终亮起

    2.从 脉动白色程序切换到闪烁橙色程序,D1 应该是随机的

    顺便说一下,你能和我分享你的代码的主要功能进行分析吗? 您可以通过电子邮件发送代码、这里是我的电子邮件地址: leon-he@ti.com 

    BRS、

    Leon

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

    您好 Leon、

    感谢您的答复。

    我已经检查了你说的,你是正确的。 当 D1 在跳转到橙色闪烁时亮起、D1 保持亮起。 但是、当跳转到橙色闪烁时、D1 熄灭。

    我想可以通过在映射中选择 All (D1、D2 和 D7) 并将 PWM 设置为 OFF 来防止这种情况发生。 您是否知道为什么情况并非如此?

    我会通过电子邮件将代码发送给您。

    编辑:
    我看到绿色 LED (D7) 实际上也在闪烁、但我将其设置得太暗、几乎看不到。

    另外、闪烁代码中的前一行或两行似乎没有执行。 在闪烁程序结束时、我跳转到指令 2(跳过前两行)。 当我使闪烁程序结束跳转到指令 0 时、蓝色 LED (D1) 熄灭、但仅在第二个循环之后(因此执行指令 0 和 1 不执行任何操作)、然后跳转到 instr。 0、D1 熄灭)。

    希望这可以澄清一下。 我还不知道为什么前两行似乎不是第一次执行。

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

    尊敬的 Laura:

    我们转到电子邮件讨论此案例。 谢谢!

    BRS、

    Leon

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

    好的、我将等待您的答复。

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

    尊敬的 Laura:

    我已收到您的电子邮件。

    我将关闭此案例、因为我们可以通过电子邮件对此进行讨论。 谢谢您~

    BRS、

    Leon