数码之家

 找回密码
 立即注册
搜索
查看: 1513|回复: 24

[ARM] 驱动多个ws2812,无规律出现某一个显示错误色,不知道是硬件还是软件问题

[复制链接]
发表于 2023-11-27 14:21:22 | 显示全部楼层 |阅读模式
本帖最后由 lmn2005 于 2023-11-27 14:23 编辑

用54只WS2812做了一个电子钟,中间的时钟点用了两只,每个8字用了13只WS2812。
芯片用py32F003(后改为GD32F103)。
驱动时序严格遵循芯片手册并结合逻辑分析仪调整延时,



主函数如下:
  1. void WS2812_Write_24b(unsigned int wsdat) // 写入24位数据
  2. {
  3.         unsigned char i;
  4.         for (i = 0; i < 24; i++)
  5.         {
  6.                 if (wsdat & 0x800000)
  7.                 {
  8.                         WS2812_H();
  9.                         delay_900ns();
  10.                         WS2812_L();
  11.                         delay_400ns();
  12.                 }
  13.                 else
  14.                 {
  15.                         WS2812_H();
  16.                         delay_400ns();
  17.                         WS2812_L();
  18.                         delay_900ns();
  19.                 }
  20.                 wsdat = wsdat << 1;
  21.         }
  22. }
复制代码
显示每秒更新一次,结果前26个2812显示完全没有问题,后面的总是会出现某个2812显示错误色:

例如我写入24*54个0,
波形可参考:https://www.bilibili.com/video/B ... 6b33fc4da40d73a2edc
本来是没有任何显示的,结果仍然会出现某个2812会显示,百思不得其解。

究竟是WS2812的问题还是单片机的问题,还是代码出现问题?请各位大佬指教,谢谢!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2023-11-27 16:17:11 | 显示全部楼层
本帖最后由 muyan 于 2023-11-27 16:18 编辑

如果是固定那一颗就换一颗,有一定概率坏猪

不过看你的意思是不固定的某一颗。。。。
回复 支持 反对

使用道具 举报

发表于 2023-11-27 17:22:48 | 显示全部楼层
会不会干扰问题呢?外部干扰信号造成2812接收的时序发生错误。可以在2812上并联电容看看
回复 支持 反对

使用道具 举报

发表于 2023-11-27 17:25:56 | 显示全部楼层
程序是中否有中断?纯软件的时序稍微打断下就会乱?可以试试SPI_DMA的方式,硬件产生时序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-27 21:00:05 | 显示全部楼层
muyan 发表于 2023-11-27 16:17
如果是固定那一颗就换一颗,有一定概率坏猪

不过看你的意思是不固定的某一颗。。。。

没有固定的,延时微调变化,就不固定了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-27 21:01:30 | 显示全部楼层
akikyoua 发表于 2023-11-27 17:25
程序是中否有中断?纯软件的时序稍微打断下就会乱?可以试试SPI_DMA的方式,硬件产生时序 ...

所有的定时器都没有启用,用STM32CubeMX生成初始代码,中断会默认启用吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-27 21:02:44 | 显示全部楼层
本帖最后由 lmn2005 于 2023-11-27 21:03 编辑
happysea72 发表于 2023-11-27 17:22
会不会干扰问题呢?外部干扰信号造成2812接收的时序发生错误。可以在2812上并联电容看看 ...

如果是干扰,前两个8字(26只2812)不会一直都正常。所以我估计不是干扰问题。
回复 支持 反对

使用道具 举报

发表于 2023-11-28 09:39:48 | 显示全部楼层
lmn2005 发表于 2023-11-27 21:02
如果是干扰,前两个8字(26只2812)不会一直都正常。所以我估计不是干扰问题。 ...

如果在软件多数情况都正常的情况下,少数不定期的异常更可能是干扰造成的。信号驱动的强度,布线的走向等等,干扰原因很多。当然时序也可能,可以调整各个信号之间的延时测试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-28 11:12:44 | 显示全部楼层
happysea72 发表于 2023-11-28 09:39
如果在软件多数情况都正常的情况下,少数不定期的异常更可能是干扰造成的。信号驱动的强度,布线的走向等 ...

我用从某宝上购买的显示条也会出现同样问题,就是2812达到一定数量后,就会无规律出现某一个2812显示错误色。
回复 支持 反对

使用道具 举报

发表于 2023-11-28 12:02:00 | 显示全部楼层
lmn2005 发表于 2023-11-27 21:01
所有的定时器都没有启用,用STM32CubeMX生成初始代码,中断会默认启用吗?

默认会有个SysTick_Handler的中断的
回复 支持 反对

使用道具 举报

发表于 2023-11-29 17:38:53 | 显示全部楼层
lmn2005 发表于 2023-11-28 11:12
我用从某宝上购买的显示条也会出现同样问题,就是2812达到一定数量后,就会无规律出现某一个2812显示错误 ...

那基本就是调整时序工作了,慢慢修改测试
回复 支持 反对

使用道具 举报

发表于 2023-11-29 20:39:20 | 显示全部楼层
用示波器看看后面的波形。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-29 21:25:08 | 显示全部楼层
我觉得4楼的朋友说得有道理,应该是某个中断起的作用。
回复 支持 反对

使用道具 举报

发表于 2023-11-30 12:17:46 来自手机浏览器 | 显示全部楼层
这个应该是串接后波形变化了。需要用示波器看波形,调节传入的脉冲宽度。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-2 19:57:08 | 显示全部楼层
akikyoua 发表于 2023-11-28 12:02
默认会有个SysTick_Handler的中断的

那该如何暂时性关闭?我用__disable_irq()关闭,结果就再无法打开。
回复 支持 反对

使用道具 举报

发表于 2023-12-5 16:11:16 | 显示全部楼层
lmn2005 发表于 2023-12-2 19:57
那该如何暂时性关闭?我用__disable_irq()关闭,结果就再无法打开。

__enable_irq()有对应的
回复 支持 反对

使用道具 举报

发表于 2023-12-7 23:28:32 | 显示全部楼层
刷的时刻把所有中断关了。。刷完再开。。我就遇到过。。。不过我是刷2000个点外加无线通讯。。就是因为没关中断差点没弄死我。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-8 19:14:31 | 显示全部楼层
ks11900 发表于 2023-12-7 23:28
刷的时刻把所有中断关了。。刷完再开。。我就遇到过。。。不过我是刷2000个点外加无线通讯。。就是因为没关 ...

用__disable_irq();关闭所有中断的,但还是无法解决问题,用STC8H驱动却正常。
回复 支持 反对

使用道具 举报

发表于 2023-12-9 21:37:24 | 显示全部楼层
lmn2005 发表于 2023-12-8 19:14
用__disable_irq();关闭所有中断的,但还是无法解决问题,用STC8H驱动却正常。 ...

或者你可以换个办法试试,就是开个定时器把刷新程序放中断中试试。。。如果正常则和中断无关
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-10 16:38:05 | 显示全部楼层
ks11900 发表于 2023-12-9 21:37
或者你可以换个办法试试,就是开个定时器把刷新程序放中断中试试。。。如果正常则和中断无关 ...

除非把代码放到中断程序里面,一定不能采用轮询方式去执行显示代码。
在执行定时器中断的时候,会被其他比定时器优先级在前的中断响应所打断吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-6-23 16:18 , Processed in 0.249600 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表