0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

驱动WS2812B灯条时显示其他颜色咋办?

冬至子 来源:小陈学不停 作者:小陈学不停 2023-07-21 15:38 次阅读

一 背景

前段时间发现在驱动WS2812B灯条的时候会有突然显示其他颜色的情况,后来排查发现是时序被其他任务打断了,在控制时序的时候需要做原子性访问来保证时序的正确性。

二 WS2812B数据手册

2.1 逻辑0和逻辑1

图片

2.2 发送时序

图片

绿色数据先发,高位在前

图片

三 写数据

3.1 精准ns和us级别延时的实现

一个__NOP()的时间是一个时钟周期,如果主频设置的是64MHz,那么一个时钟周期就是1/64000000 = 15.625ns,这里只需要实现一个330ns延时,2个330ns就是660ns了。

void delay_330ns(void)
{
    volatile uint8_t cnt = 21;
    while(cnt--)
    {
        __NOP();
    }
}
void delay_660ns(void)
{
    volatile uint8_t cnt = 21*2;
    while(cnt--)
    {
        __NOP();
    }
}
void ws2812b_write_data(uint8_t data){
  for(uint8_t i=0;i< 8;i++)
  {
    if(data & 0x80)//高位先发
    {
      GPIOA- >BSRR = GPIO_PIN_8;
      delay_660ns();
      GPIOA- >BRR = GPIO_PIN_8;
      delay_660ns();
    }
    else
    {
      GPIOA- >BSRR = GPIO_PIN_8;
      delay_330ns();
      GPIOA- >BRR = GPIO_PIN_8;
      delay_660ns();
    }
    data< <=1;
  }
}


#define CONFIG_LED_COUNT 12


void updata_light(uint8_t green,uint8_t red,uint8_t blue)
{  
  rt_base_t level = rt_hw_interrupt_disable();//关闭中断

  for(int i=0;i< CONFIG_LED_COUNT;i++)
  {  
      WS2812_Send(green);      //发送当前需要亮的灯的颜色
      WS2812_Send(red);
      WS2812_Send(blue);
  }
  rt_hw_interrupt_enable(level);//开启中断

  rt_hw_us_delay(300);//复位显示
}

四 总结

当灯的数量比较多的时候,就不能用这种延时方式了,长时间的关闭中断可能会引起一些中断无法及时响应造成数据丢失,在发现问题的时候或者调试新算法的时候,需要基于数据来分析问题,有了数据自然就会有答案了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    52

    文章

    8150

    浏览量

    145947
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107824
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51898
  • 串口中断
    +关注

    关注

    0

    文章

    64

    浏览量

    13855
  • WS2812B
    +关注

    关注

    1

    文章

    38

    浏览量

    2148
收藏 人收藏

    评论

    相关推荐

    什么是WS2812BWS2812B带是怎么连接的呢?

    WS2812B是一款全彩LED控制IC,单总线控制,何为单总线我的理解就是数据线在一根线上传输的控制方式就是单总线。
    的头像 发表于 07-08 14:53 1w次阅读
    什么是<b class='flag-5'>WS2812B</b>?<b class='flag-5'>WS2812B</b><b class='flag-5'>灯</b>带是怎么连接的呢?

    哪位大神有完整的STM32F205驱动WS2812B带的程序

    哪位大神有完整的STM32F205驱动WS2812B带的程序
    发表于 09-03 18:08

    使用ESP8266驱动WS2812B型RGB LED智能制作分享

    这个智能方案很不错,只用了一个无线WIFI esp8266芯片,驱动ws2812b型RGB LED,效果很赞,在群里看到的,特分享下,若是侵犯了版权,联系我删除就行了
    发表于 07-16 04:35

    WS2812B RGB全彩LED

    WS2812B RGB全彩LED珠,只需通过一根信号线控制多个显示,本教程使用X-CTR100控制器驱动
    发表于 08-06 08:15

    怎样使用PWM+DMA的方式去驱动WS2812B

    PWM+DMA 驱动 WS2812一、项目要求(主要目的)使用 PWM+DMA 的方式驱动 WS2812B, 并每隔 800ms 随机显示
    发表于 02-22 06:42

    ws2812b led做远程区域面板控制器的教程

    描述WS2812B 远程区域面板控制器我用ws2812b led做了一个面板,你可以把覆盆子前面的动画放到面板上使用此板,您可以控制面板并将其放置在任何有 wifi 的地方PCB代
    发表于 07-29 07:16

    使用WS2812b Led的diy光剑光剑控制器

    描述使用 WS2812b Led 的 diy 光剑光剑控制器,包括用于声音的微型 SD 插槽、用于运动跟踪的 6 轴传感器和用于光剑声音的扬声器。通过板载 USB 端口和 Arduino IDE 进行编程。
    发表于 08-25 07:40

    WS2812B最后一个颜色总是不对,是什么原因造成的?

    WS2812B最后一个颜色总是不对
    发表于 09-20 07:24

    【LuckFox Pico Plus开发板免费试用】05_使用SPI驱动WS2812B

    使用SPI驱动WS2812B 前面把开发环境全部搭好,工具也都准备好了,这次就来做点小demo,正好手上有一个WS2812B的小,上面有
    发表于 10-29 19:15

    使用ESP8266驱动WS2812B型RGB LED简单3步打造智能

    使用ESP8266驱动WS2812B型RGB LED简单3步打造智能
    发表于 03-26 17:15 140次下载

    Arduino WS2812B LED带设计方案

    Arduino WS2812B LED带可单独控制每个LED的亮度和颜色,提供了一种简单而酷炫的LED效果体验。
    发表于 04-24 08:36 1.2w次阅读
    Arduino <b class='flag-5'>WS2812B</b> LED<b class='flag-5'>灯</b>带设计方案

    使用WS2812b Led的diy光剑控制器

    电子发烧友网站提供《使用WS2812b Led的diy光剑控制器.zip》资料免费下载
    发表于 08-02 11:01 11次下载
    使用<b class='flag-5'>WS2812b</b> Led<b class='flag-5'>灯</b><b class='flag-5'>条</b>的diy光剑控制器

    迷你乒乓球含Arduino Nano WS2812B LED

    电子发烧友网站提供《迷你乒乓球含Arduino Nano WS2812B LED.zip》资料免费下载
    发表于 11-02 11:00 0次下载
    迷你乒乓球含Arduino Nano <b class='flag-5'>WS2812B</b> LED<b class='flag-5'>灯</b><b class='flag-5'>条</b>

    WS2812B遥控控制器

    电子发烧友网站提供《WS2812B遥控控制器.zip》资料免费下载
    发表于 11-25 09:16 8次下载
    <b class='flag-5'>WS2812B</b>遥控<b class='flag-5'>灯</b>控制器

    适用于Azure Sphere的WS2812B LED驱动

    电子发烧友网站提供《适用于Azure Sphere的WS2812B LED驱动器.zip》资料免费下载
    发表于 12-06 14:42 0次下载
    适用于Azure Sphere的<b class='flag-5'>WS2812B</b> LED<b class='flag-5'>灯</b>带<b class='flag-5'>驱动</b>器