ws2812b驱动方法(普通io延时驱动/spi驱动)

记录一下这个当时制作ws2812驱动的心得,这是我自己的理解,如果有什么错误的话,希望广大网友可以及时发出来进行改正。首先不同的厂家的制作的ws28112b灯的时序也是不一样的,这个时序的话最好是不要在网上找ws2812b灯的时序,最好是问厂家要来数据手册,然后按照手册上的时序是最好的。下图是我当时使用的一款灯的时序表

给第一次使用这个类型灯的小伙伴解释一下 ws2812b灯发送数据靠的是高低电平发送的时间来决定发送的数据是0还是1

像我现在使用的这个就是你用单片机的io引脚连接到ws2812b接收数据的引脚上加入你先给你使用的io一个高电平250ns接着给一个低电平1000ns就相当于发送了1,同理你先

1.用io的方式驱动ws2812b

         1.用普通io驱动的话就是发送0的时候,先把电平拉高然后250ns,然后再把电平拉低发送1000ns,同理发送1的时候,就是先把电平拉高850ns,然后再把电平拉低1000ns。

      2.用nop延时的话,1nop的时间最简单的理解就是假如你的单片机主频是72m,那么72个nop

的时间就是1us。1nop的时间就是1/72us.同理假如你的单片机主频是96m,那么96个nop

的时间就是1us。1nop的时间就是1/96us.

2.用spi的方式驱动ws2812b

        1.spi驱动的优点

  在单片机运行的过程中,代码中有很多延时的话会导致程序出现各种各样的问题,特别是不适用操作系统的时候。用spi驱动的好处就是不需要延时。

        2.spi驱动的原理

  当我们使用spi通信的时候,通信协议发1或者发0的话都是按照电平拉高拉低来发送的,这样的话就跟我们这个驱动灯珠的方式非常相似了,然后我们可以看到上面数据书册上的时序图他对这个最后发送低电平的时间最大是没有限制的,这样我们就可以使用这个来给灯珠发送0或者1的数据。

     spi通信的话有四种方式,如下图

        之前在一篇文章上面说,miso数据线空闲时候的电平跟这个spi的通信模式有关,我验证了一下,这个说法是错误的,上面所说的通信模式只跟sck时钟线的电平有关,miso数据线空闲时刻的电平跟你初始化跟这个miso数据线io设置的上拉下拉有关,上拉的话空闲的时候就是数据线就是高电平,下拉的话空闲的时候就是低电平。

        3.怎么使用spi驱动

        首先我们需要先确定spi的时钟频率是干什么的,假如你的单片机的时钟频率是72m,然后你的spi时钟分频为9,那么你的spi的时钟速率就是8m,也就是1s可以发送8m的数据,我们可以计算出发一位的时间是多少1s/8000000*1000*1000=125ns,假如我们spi发送一包数据0b11000000,那么我们发送这包数据高电平的时间计时250ns,低电平时间就是750ns。然后我们再看上面的时序是不是就跟发送0码的时序很接近了,从上图可以看出我使用这个灯的时序对低电平要求不高的,所以说低电平750ns的时间也是可以的,从上面可以看出我们使用spi通信发送1包0xc0的数据就相当于发送了灯珠数据1的时序。同理我们发送0b11111110,高电平时间875ns,低电平时间125ns也是满足这个时序0的。也就是说假如我们的spi通信速率是8m,我发送0xc0就相当于向灯的数据线发送了0码,我发送0xfe就是向灯的数据线发送了1码。

使用延时驱动的话,就是把上面发送0码和1码的函数修改为你电平拉高和拉低的时间就好了

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值