工具/软件:
您好、
地址 ADDR0和 ADDR1上的 LP5012RUKR 是否为 "1"有任何问题?
当 ADDR0和 ADDR1为 "1"时、我们可以使用除所有地址之外的驱动程序
可以帮帮我吗?
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.
您好 Felix:
我与 Foison 合作,我也联系了你在这里的支持:
我认为 LP5012器件不会出现 NACK、因为我从未向驱动器发出读取命令、而是仅写入命令来配置驱动器、设置亮度和更改每个 LED 的颜色。
您将在项目的 C 文件中找到数据日志、位于 Wetransfer 链接 bellow 中、该链接是在 Microchip Studio 上开发的、可在 Atmega32u4上运行。
这是一个测试项目、我仅用于与 LP5012通信。 正如我所说的、它适用于以下驱动程序:
驱动器1:ADDR0 = GND 且 ADDR1 = GND
-驱动器2:ADDR0 = GND 且 ADDR1 = VCC
驱动程序3:ADDR0 = VCC 且 ADDR1 = GND
并且不适用于:
-驱动程序4:ADDR0 = VCC、ADDR1 = VCC
项目说明
在 main.c 中:
位置
我用 init_led ()函数配置 LED
我用 set_bright_led ()设置亮度
我用 led_x_off 关闭所有 LED
在我的 while 循环中(1)
我发送命令以使用 led_x_on()打开我的 LED
main.c 中调用的函数在 LED.c 中实现
LED.c 中调用的函数调用 I2C.c 中的函数(朝向底部)、从而实现 Atmega32U4和 LP5012之间的 I2C 通信。
您好 Felix:
图1驱动器1:ADDR0 = GND 且 ADDR1 = GND

图2驱动器2:ADDR0 = GND 且 ADDR1 = VCC

图3驱动器3:ADDR0 = VCC 且 ADDR1 = GND

图4驱动程序4:ADDR0 = VCC 且 ADDR1 = VCC

我们从4个驱动器捕获了 I2C (SCL 和 SDA)信号、并分别对其进行控制。
在每种情况下,我发送:
我希望这能回答您有关 ACK 的问题。
此致、
Nicola
您好、Nicola、
首先、为什么 SDA 的空闲状态保持在低电平状态? SCL 是否有上拉电路?
其次、对于 映像4驱动程序4:ADDR0 = VCC 且 ADDR1 = VCC、可能无法识别启动条件。 STOP 和下一次 START 之间的空闲时间应大于1.3us。 驱动器地址字节只有8个时钟周期、即 ACK 的第9个时钟丢失了。
如果提供了原理图、将会很有帮助。


此致、
Felix
您好 Felix:
停止和下一次启动之间的空闲时间为1.6us。

这就是原理图
e2e.ti.com/.../Carte-4-touches-fonction-micon-5-Safety-RGB-Secable-carr_E900_-11.pdf
您好 Felix:
感谢您的帮助、我们了解了如何使用最后一个地址以及您最后的建议订购我们的驾驶员、告诉我们将 EP 连接到 GND。
我有一个新问题:
我们希望在同一 I2C 总线上控制多个具有相同地址的驱动器。
我们认为可以通过启用和禁用驱动器上的 EN 引脚来选择要控制哪个驱动器、但我们意识到在禁用寄存器复位时会执行该复位。
我们尝试了使用 DEVICE_CONFIG0寄存器中的 Chip_EN 进行操作、但它只会关闭 LED 而不停止 I2C 通信。
您是否有一种解决方案可以在同一 I2C 总线上单独控制多个具有相同地址的驱动器?