找回密码
 立即注册
楼主: 代码***

代码人生 之 01点灯程序(WS2812B,64灯板,呼吸灯)

[复制链接]
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    67

    主题

    838

    回帖

    2796

    积分

    金牌会员

    积分
    2796
    发表于 2023-11-30 11:11:01 | 显示全部楼层
    空某人 发表于 2023-10-9 20:49
    灯的亮度是如何改变的?  比如一个红色是11111111,如果发送11111110是不是就要暗一些 ...

    发送0x000000不发光,发送0x010101(白色)亮度最低,发送0xffffff(白色)亮度最高。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    67

    主题

    838

    回帖

    2796

    积分

    金牌会员

    积分
    2796
    发表于 2023-12-1 08:46:12 | 显示全部楼层
    我用STC8H8K64U-TSSOP20,内部IRC 主时钟 24000000L。
    用楼主的void WS2812_bit(bit data_bit),
    时序好像不太准确,因为测试的结果与楼主的不一样。
    不知道为什么,我有空再用逻辑分析仪测一下脉冲宽度。

    1. //====================================================================
    2. //发送 0,1码时序,此时序由逻辑分析仪拉波形得出,时间上准确无误
    3. //复位 300ns以上
    4. //1码 高电平750ns-1.6us 低电平220ns-420ns (0.85us,0.4us)
    5. //0码 高电平220ns-420ns 低电平750ns-1.6us (0.4us,0.85us)
    6. //====================================================================
    7. void WS2812_bit(bit data_bit)
    8. {
    9.         if(data_bit)//0.85,0.4us
    10.         {
    11.                 ws2812b_IO=1;
    12.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    13.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    14.                 ws2812b_IO=0;       
    15.         }
    16.         else//0.4,0.85
    17.         {
    18.                 ws2812b_IO=1;
    19.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    20.                 ws2812b_IO=0;
    21.                 _nop_();_nop_();_nop_();_nop_();
    22.         }
    23. }
    复制代码




    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 163 天

    [LV.7]常住居民III

    24

    主题

    130

    回帖

    429

    积分

    中级会员

    积分
    429
    发表于 2023-12-3 18:17:30 | 显示全部楼层
    老哥,我买的32MHz晶振已经到货了,刚装到STC89C52上尝试了一下,可以驱动,这是我发的帖子,STC89C52RC驱动WS2812灯带,但是不知道怎么制作呼吸灯,求指导~

    MCU开发者和爱好者
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 163 天

    [LV.7]常住居民III

    24

    主题

    130

    回帖

    429

    积分

    中级会员

    积分
    429
    发表于 2023-12-3 21:05:44 | 显示全部楼层
    亲测代码有效,改了一下呼吸时间,效果很不错~

    VID_20231203_210101.mp4

    368.1 KB, 下载次数: 8

    WS2812呼吸灯

    MCU开发者和爱好者
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    67

    主题

    838

    回帖

    2796

    积分

    金牌会员

    积分
    2796
    发表于 2023-12-4 18:39:01 | 显示全部楼层
    可以用了,就是直接使用楼主的代码,原来我的项目是启用USB的,我只是把楼主的代码添加到项目中。
    感谢楼主的分享!
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 161 天

    [LV.7]常住居民III

    67

    主题

    838

    回帖

    2796

    积分

    金牌会员

    积分
    2796
    发表于 2023-12-4 18:46:53 | 显示全部楼层
    请问楼主,如果项目中有开启某些中断,在驱动WS2812时,是不是需要暂时关闭全部中断,以免影响时序?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    难过
    9 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    0

    主题

    30

    回帖

    334

    积分

    中级会员

    积分
    334
    发表于 2023-12-6 00:06:38 | 显示全部楼层
    硬件是怎么样的呀
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9330

    回帖

    1万

    积分

    管理员

    积分
    13934
    发表于 2024-1-9 08:47:04 | 显示全部楼层
    SPI方案:
    只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的,MISO、SCLK不能做它用。本例使用P1.3-MOSI输出驱动信号,用户可以切换到别的脚。
    ===将 MISO 不做其他用途;
    ===将 MISO管脚 先设置为对外输出0;
    ===MOSI 发送完成后,对外停止时输出的是 MISO 读到的状态, 0 ,这 STC-R&D 留了这么个绝活支持 WS2812B !!!

    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 89 天

    [LV.6]常住居民II

    13

    主题

    334

    回帖

    774

    积分

    荣誉版主

    热心市民

    积分
    774
    发表于 2024-3-11 16:12:39 | 显示全部楼层
    实测没毛病,一次点亮 微信图片_20240311161116.jpg

    睁开眼睛做场梦~~~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 14:39
  • 签到天数: 39 天

    [LV.5]常住居民I

    2

    主题

    2

    回帖

    168

    积分

    注册会员

    积分
    168
    发表于 2024-3-30 22:47:29 | 显示全部楼层
    void WS2812_rand_color(u8 R,u8 G,u8 B)
    {
            SendData(G);
            SendData(R);
            SendData(B);
    }

    void DisP_Color(u32 dat)
    {
        WS2812_rand_color(dat>>8,dat,dat>>16);   
    }
    这里RGB三色我测试了是错乱的,不知楼主有没有注意
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-6 09:33 , Processed in 0.071153 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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