大家好,支持部门, 我看到我的问题以前被问及过(请参阅运算放大器的第一个答复:“我可以让 LED 完全亮起,但我无法使用单独的 LED PWM 来控制亮度。”) 这个帖子已标记为已解决、但已解决的部分却使我和我的问题无法解决。 以下是开机自检 :e2e.ti.com/.../126350 打开(无 PWM)或关闭(完全) LED 时没有问题。 我也可以使用单个 PWM 使它们变暗 但仅在连接的 LED 冻结之前的短时间内。 有人可以帮助我吗? 谢谢 Chris
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.
肯尼思、您好!
解释"LED 冻结"的最佳方法是向您展示:
(两个项目显示一个来回闪烁。)
- 5个 TLC59108 -在每个 LED 大约150/255占空比下运行 PWMx 的测试板。
原理图:
- 连接至 PIC
-在启动/复位时写入寄存器:
START 命令
写入=从器件地址 X
(写入:)
MODE1 = 0x01
MODE2 = 0x80
PWM0 = 100 (PWM1至 PWM7的十进制值相同)
GRPPWM = 0xFF
GRPFREQ = 10
LEDOUT0 = 0x55
LEDOUT1 = 0x55
SUBADR1 = 0x92
SUBADR2 = 0x94
SUBADR3 = 0x96
ALLCALLADR = 0x90
IREF = 0xFF
STOP 命令
-写入下一个 TLC59108以执行闪存例程。
START 命令
写入=从器件地址 X
写入= 0x0C (LEDOUT0)
写入= 0x88
STOP 命令
START 命令
写入=从器件地址 X
写入= 0x0D (LEDOUT1)
写入= 0x88
STOP 命令
START 命令
写入=从器件地址 X
写入= 0xA2 (写入所有 PWM 寄存器、从 PWM0开始、自动递增)
写入= 0 (PWM0占空比值)
写入= 100 (PWM1占空比值)
写入= 0 (PWM2占空比值)
写入= 100 (PWM3占空比值)
写入= 0 (PWM4占空比值)
写入= 100 (PWM5占空比值)
写入= 100 (PWM6占空比值)
写入= 0 (PWM7占空比值)
STOP 命令
肯尼思、您好!
按照您所述、我尝试对五个 TLC59108 IC 执行 ALLCALL、使用 LEDOUT0 = 0x55且 LEDOUT1 = 0x55。
请参阅:(PDF 第26页表12 ALLCALLADR - LED 全调用 I2C 总线地址寄存器(地址11h)位描述)
我无法选择您描述的地址(0x48)、因为它不符合 AC[7:5]= 100或 AC[0]= 0的"固定"部分
当我选择一个符合的 ALLCALL 地址时、我可以成功地打开或关闭由五个 IC 控制的所有 LED。
不过、这不是最初的问题。
我还尝试将 ALLCALL 写入所有 PWMn 寄存器、其值介于完全打开和完全关闭之间。
结果各不相同。 有时呼叫正常、LED 会变暗。 大多数情况下 TLC5932没有响应、并保持先前的状态。
我需要知道 TLC59108为什么处理 PWM 或调光、那么糟糕???
为什么 IC 不能正常工作?
如果我希望芯片仅打开或关闭 LED、我应该使用移位寄存器、因为它比 TLC59108简单得多。
我希望 TLC59108能够(应该)以可靠的方式实现每通道 PWM;但我对这一间歇性问题感到沮丧、因为这是实现我的目标的不合理障碍。
请帮助解决 PWM (调光)问题、因为这是问题、而不是"完全打开/关闭"。
Kenneth、您好、感谢您抽出宝贵的时间为您提供帮助。
是的、我使用5V 电源轨来实现所有功能;MCU、TLC59108、LED。 使用10K 上拉电阻器时 I2C 为5V。
我在 I2C 上获得正确的信号... 让我解释一下。 现在、我有一个示波器、但它很便宜、我似乎无法"捕获"信号来分析它、但我可以看到时钟和数据线波形快速闪烁。 无论以何种速率、我都有一系列读取或写入的各种 I2C 项目(在主设备侧和从设备侧);因此我可以看到我的 I2C 代码工作(它执行我希望的操作)。 对于这个特定的项目、我知道到芯片的 I2C 命令的工作方式是我可以单独(和所有调用)发送 LEDOUT0/1命令。
我有五个具有%100 xxxx 0固定位的芯片被寻址;
[芯片1]%100 0000 0 - 0x80
[芯片2]%100 0001 0 - 0x82
[芯片3]%100 0101 0 - 0x8A
[芯片4]%100 0011 0 - 0x86
[芯片5]%100 1110 0 - 0x9C
[ALLCALL]%100 0111 0 - 0x8E
寄存器地址;
MODE1 - 0x00
MODE2 - 0x01
PWM0 - 0x02
PWM1 - 0x03
PWM2 - 0x04
PWM3 - 0x05
PWM4 - 0x06
PWM5 - 0x07
PWM6 - 0x08
PWM7 - 0x09
因此、在 I2C 开始调用后、我将使用芯片地址、寄存器地址和数据字节、最后是 I2C 停止命令。
我将使用此方法告诉 TLC59108要执行的操作。 我也使用了自动递增、但 PWMn 的结果也是一样的。
Chris