6个版本
0.1.5 | 2024年2月21日 |
---|---|
0.1.4 | 2024年2月16日 |
0.1.2 | 2023年12月14日 |
0.1.1 | 2023年11月13日 |
0.1.0 | 2023年8月3日 |
#712 in 嵌入式开发
每月131次下载
15KB
219 行
嵌入式-hal spi traits的Ws2811驱动程序
基于 ws2812-spi-rs 的分支
用于与 smart-leds crate 一起使用。
使用SPI作为时序提供者的嵌入式-hal ws2811 led驱动程序。
它提供了两种变体
-
常规使用
您的SPI外设必须在1.6MHz和3.2MHz之间运行,且SPI数据实时生成。这意味着您的核心必须相当快(48 MHz应该足够)。
-
预渲染
如果您的核心太慢(例如,AVR系列),您可能想使用这个。它事先创建所有数据,然后发送。这意味着您必须提供一个足够大的数据数组,以容纳所有SPI数据。
它不起作用!!!
-
您使用的是常规变体吗?您的SPI运行在正确的频率吗?
您的CPU可能太慢,但这也可能取决于HAL实现和您的迭代器链。尝试使用
prerendered
变体可能有所帮助。对于许多SPI外设,时钟生成方式比例如UART外设简单得多。您应该通过研究数据手册和hal代码或使用逻辑分析仪来验证它是否在可接受的频率下运行。一个基于fx2的,通常在10美元以下,效果非常好。 -
如果第一个LED总是亮着,无论您输入什么数据,您的SPI可能没有在空闲时将MOSI线设置为低(您可以使用万用表检查)。这也可能是在发送第一个位时的时序问题,例如stm32f030上的2MHz。
您可以使用
mosi_idle_high
特性,它可能有所帮助。 -
您的设备足够快吗?您的迭代器足够快吗?太长时间可能会完全破坏常规版本的时序。尝试预渲染变体。
-
所有东西都是白色的吗?这可能源于太慢的SPI外设或在字节之间花费太多时间的SPI外设
-
你的第一个LED亮度/颜色是否不正确,而其他LED则按预期工作?这是因为数据线的电压低,或者Vin和Din之间的电压差太大,导致一些“高”位被芯片读取为“低”位。由于芯片的电路,这些电压在传递到线上的下一个LED时被调节,这就是为什么其他LED按预期工作。(关于这里具体发生了什么,请参见 Hackaday | 5V WS2812 控制使用 3.3V 数据的欺骗)
-
你是否使用了
--release
编译器标志?通过SPI传递每个字节的时序非常敏感,编译未经完全优化的代码可能会影响时序。始终使用
--release
标志与你的cargo <command>
一起使用,或者另设[profile.dev] opt-level = "3"
确保时序与你的编程相匹配。一个明显的迹象是所有像素在每种颜色下都达到全亮度。
当你打开一个关于错误/奇怪数据的问题时,如果包含你的代码(当然)以及示波器/逻辑分析仪捕获的MOSI & SCK,将会有所帮助。
作者
👤 Le French POC
- Github: @LeFrenchPOC
- 网站: https://www.lefrenchpoc.fr/
支持我们
如果这个项目帮到了你,请给一个 ⭐️!
许可证
许可方式任选其一:
- Apache License,版本 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由你选择。
贡献
除非你明确表示,否则根据 Apache-2.0 许可证定义的,你提交的任何有意用于包含在工作中的贡献,将按上述方式双重许可,不附加任何额外的条款或条件。
依赖
~170KB