打印

单线控制的led灯带 ws2812 驱动程序总被定时器打断

[复制链接]
8366|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ergabd|  楼主 | 2014-12-21 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的stc15系列的单片机写的驱动程序  ws2812是单线控制的 跑的20多M晶振 控制了64像素点的灯珠  区别高低电平的时候能用的是延时  
由于程序外设比较多 用到了定时器 还要用到pca模块进行霍尔测速
现在是不开中断 程序控制灯带没有一点问题 一开中断 ws2812的数据就会被打断 灯带的显示就很混乱 每次在刷新一帧数据之前把EA=0 刷新完之后EA=1 就没问题了
但是我里面涉及到测速 刷新一帧灯带64像素点大概要占用2ms时间 我刷新比较频繁的话 占用时间会更多 这样我测速就不准了
请各位前辈提供一个程序思路 谢谢

相关帖子

沙发
ergabd|  楼主 | 2014-12-21 16:49 | 只看该作者

使用特权

评论回复
板凳
hnkf118| | 2014-12-21 17:24 | 只看该作者
分时控制, 只要保证不闪烁就行了。 另外刷新LED灯的时候 如果时序不能乱的话,禁止中断就是了。 好像一般的器件都没这么严格的时序的吧? 指的时间,

使用特权

评论回复
地板
Jack315| | 2014-12-21 18:32 | 只看该作者
ws2812 的控制要用定时器,否则无法保证时序的。

LZ 晒下N多定时器都干啥去了?

使用特权

评论回复
5
ergabd|  楼主 | 2014-12-21 18:41 | 只看该作者
hnkf118 发表于 2014-12-21 17:24
分时控制, 只要保证不闪烁就行了。 另外刷新LED灯的时候 如果时序不能乱的话,禁止中断就是了。 好像一般 ...

主要这个是单线控制的 我这还没刷新64个像素点 就被中断了 中断时间超过24us的话再送数据就认为是下一帧的数据了

使用特权

评论回复
6
ergabd|  楼主 | 2014-12-21 18:54 | 只看该作者
Jack315 发表于 2014-12-21 18:32
ws2812 的控制要用定时器,否则无法保证时序的。

LZ 晒下N多定时器都干啥去了? ...

串口中断必须设为最高优先级 一直在接收数据 外部中断用了一个检测外部脉冲变化次数 pca中断要通过无刷电机3根霍尔线判断电机转的方向和转速也是要即时响应 其他的是通过定时器分时执行的 现在我刷64个像素点的时候没刷完被中断时间超过24us 再送数据被认为是下一帧数据了 如果我等着刷完一帧数据的话要大约2ms 等待时间有点长 希望能指点一下

使用特权

评论回复
7
hnkf118| | 2014-12-21 19:34 | 只看该作者
你这个刷屏一定要一次全部刷新完64个像素? 另外串口中断 可以采取BUF的形式,这样这个占用的时间就比较短了。而且串口中断 你波特率不高的情况下(列如9600), 不用最高优先级的。 检测脉冲变化次数,也是一样 数据后台处理。 另外LED 是要依靠你刷新维持显示? 还是你只刷新数据,他自己维持显示?这点就比较重要, 如果是前者,你只在需要刷新数据的时候,刷新就是了,

使用特权

评论回复
8
康康同学| | 2014-12-22 14:47 | 只看该作者
看了下ws2812的手册和使用方法,没有太好的解决办法,得用一个专门的定时器,并且把定时中断优先级开到最高。

使用特权

评论回复
9
康康同学| | 2014-12-22 14:49 | 只看该作者
个人觉得你一个IO控制64个点有点牵强,分成两个或者4个IO,那用在刷新的时间会少一些

使用特权

评论回复
10
YJCSXDL| | 2015-1-23 14:02 | 只看该作者
楼主能够说下你是如何驱动WS2812的,我的灯为什么一直不亮呢,亮的话也只是绿色的。

使用特权

评论回复
11
15647402999| | 2015-3-18 08:11 | 只看该作者
楼主可以把代码给我发一份吗?724485809@qq.com,谢谢

使用特权

评论回复
12
shenzhifang| | 2015-3-25 01:56 | 只看该作者
我也想要一份驱动部分的  zhifangs@qq.com

使用特权

评论回复
13
ergabd|  楼主 | 2015-4-16 11:51 | 只看该作者
YJCSXDL 发表于 2015-1-23 14:02
楼主能够说下你是如何驱动WS2812的,我的灯为什么一直不亮呢,亮的话也只是绿色的。 ...

用的51单片机吧  应该是时序不对

使用特权

评论回复
14
liweidxh| | 2015-6-10 17:01 | 只看该作者
楼主我想要驱动代码,1663931967@qq.com

使用特权

评论回复
15
海天家族5| | 2016-1-27 15:47 | 只看该作者
这个大哥,小弟最近也在学习单片机怎么控制WS2812的驱动程序,麻烦这位大哥给我发一份好不,我好学习学习。

使用特权

评论回复
16
海天家族5| | 2016-1-27 15:49 | 只看该作者
太激动了,忘记留联系方式了。492143961@qq.com

使用特权

评论回复
17
ayh520| | 2016-7-7 22:26 | 只看该作者
求楼主一份代码,自己编了一份时序用示波器总不对,崩溃了好人一生平安

使用特权

评论回复
18
ergabd|  楼主 | 2016-7-8 16:46 | 只看该作者
把一个简单的驱动发上来  就不给你们一一发了  在这下载吧

led - ws2812.rar

48.1 KB

使用特权

评论回复
19
datouyuan| | 2016-7-8 17:43 | 只看该作者
这驱动还是比较简单的,uS级,用51mcu很难保证时序准确.

感觉驱动前后一定要加关中断和开中断.

关中断2mS,这么长时间应该会对很多中断造成影响.这没什么好办法.

使用特权

评论回复
20
头套大神| | 2016-10-24 16:03 | 只看该作者
怎样联系LZ

使用特权

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

本版积分规则

26

主题

133

帖子

3

粉丝