打印
[经验分享]

驱动WS2812

[复制链接]
3154|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cemaj|  楼主 | 2023-11-25 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
WS2812是一个通信速度比较快的芯片,而89单片机是比较慢的单片机。
89单片机使用32M晶振、12T模式,用IO口直接驱动WS2812灯珠。
以下视频是驱动WS2812的效果
部分源代码:
#ifndef WS2812B_Drive                //如果没有找到这个标签
#define WS2812B_Drive                //那么就打一个这个标签
sbit WS2812_GPIO=P2^0;
u8 data WS2812_Write_Buffer[25];
void WS2812_Write_Data(u8 *Point,u8 len)
{
        u8 data i,j,k;
        u8 bdata Value;
        for(i=0;i<len;i++)
        {
                for(j=0;j<3;j++)
                {
                        switch(j)
                        {
                                case 0:Value=*(Point+1);break;
                                case 1:Value=*(Point);break;
                                case 2:Value=*(Point+2);break;                        
                        }
                        k=0x80;
                        while(k)
                        {
                                if(Value&k)
                                {
                                        WS2812_GPIO=1;
                                }
                                WS2812_GPIO=1;
                                WS2812_GPIO=0;
                                k>>=1;
                        }
                }
                Point+=3;
        }
}
void WS2812_Display_Ser()
{
        static xdata u8 count=0;
        if(count<100)
        {
                WS2812_GPIO=0;
                count++;
        }
        else
        {
                EA=0;
                WS2812_Write_Data(WS2812_Write_Buffer+1,8);
                EA=1;
                count=0;
        }
}
#endif

使用特权

评论回复
沙发
jtracy3| | 2023-12-7 21:48 | 只看该作者
生成0码和1码的时序需要精确控制,通常要求在微秒级别。生成0码时,高电平持续200ns至380ns,然后变为低电平,低电平持续580ns至1μs;生成1码时,高电平持续580ns至1μs,然后变为低电平,低电平同样持续580ns至1μs。

使用特权

评论回复
板凳
robertesth| | 2023-12-8 10:26 | 只看该作者
PWM控制需要发送占空比不同的二进制信号。

使用特权

评论回复
地板
uiint| | 2023-12-8 15:35 | 只看该作者
需要设置适当的延时和定时,以满足WS2812全彩LED的时序要求

使用特权

评论回复
5
mikewalpole| | 2023-12-8 15:44 | 只看该作者
WS2812使用单总线通信方式,通过一个IO口传输数据,允许多级串联。

使用特权

评论回复
6
louliana| | 2023-12-8 16:01 | 只看该作者
信号时序需要控制在规格书的要求范围内。

使用特权

评论回复
7
averyleigh| | 2023-12-8 16:55 | 只看该作者
使用GPIO模拟、SPI数据传输、DMA定时器

使用特权

评论回复
8
chenjun89| | 2023-12-8 20:09 | 只看该作者
可以使用SPI和PWM模式来驱动

使用特权

评论回复
9
minzisc| | 2023-12-9 10:31 | 只看该作者
可以通过延时翻转高低电平模拟WS2812的通信时序

使用特权

评论回复
10
ingramward| | 2023-12-9 15:22 | 只看该作者
引脚功能 WS2812可采用级联的方式

使用特权

评论回复
11
geraldbetty| | 2023-12-9 15:37 | 只看该作者
WS2812B每个灯接收的是24bit数据,包括GRB颜色信息

使用特权

评论回复
12
janewood| | 2023-12-9 16:00 | 只看该作者
可以参考现有的驱动库              

使用特权

评论回复
13
biechedan| | 2023-12-9 21:29 | 只看该作者
驱动WS2812需要注意信号时序、MCU的主频和数据格式等问题。

使用特权

评论回复
14
adolphcocker| | 2023-12-9 22:41 | 只看该作者
WS2812全彩LED在工作时会产生一定的热量,需要确保其散热良好,以避免过热损坏。

使用特权

评论回复
15
macpherson| | 2023-12-10 15:33 | 只看该作者
驱动电压和驱动电流是否足够驱动这些彩灯

使用特权

评论回复
16
chenci2013| | 2023-12-10 17:08 | 只看该作者
在控制多个WS2812B时,硬件连接和数据传输机制都必须保证数据的连续性。

使用特权

评论回复
17
saservice| | 2023-12-10 17:15 | 只看该作者
一个波形的周期约为1.25us, 合理设置数据传输的时间间隔

使用特权

评论回复
18
jimmhu| | 2023-12-12 10:36 | 只看该作者
在驱动多个WS2812时,需要注意数据传输的顺序和级联方式

使用特权

评论回复
19
lihuami| | 2023-12-12 12:01 | 只看该作者
简化WS2812全彩LED的驱动

使用特权

评论回复
20
51xlf| | 2023-12-13 10:27 | 只看该作者
WS2812的工作电压较低,对外部干扰比较敏感。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

3810

帖子

2

粉丝