单线控制的led灯带 ws2812 驱动程序总被定时器打断
用的stc15系列的单片机写的驱动程序ws2812是单线控制的 跑的20多M晶振 控制了64像素点的灯珠区别高低电平的时候能用的是延时由于程序外设比较多 用到了定时器 还要用到pca模块进行霍尔测速
现在是不开中断 程序控制灯带没有一点问题 一开中断 ws2812的数据就会被打断 灯带的显示就很混乱 每次在刷新一帧数据之前把EA=0 刷新完之后EA=1 就没问题了
但是我里面涉及到测速 刷新一帧灯带64像素点大概要占用2ms时间 我刷新比较频繁的话 占用时间会更多 这样我测速就不准了
请各位前辈提供一个程序思路 谢谢
分时控制, 只要保证不闪烁就行了。 另外刷新LED灯的时候 如果时序不能乱的话,禁止中断就是了。 好像一般的器件都没这么严格的时序的吧? 指的时间, ws2812 的控制要用定时器,否则无法保证时序的。
LZ 晒下N多定时器都干啥去了? hnkf118 发表于 2014-12-21 17:24 static/image/common/back.gif
分时控制, 只要保证不闪烁就行了。 另外刷新LED灯的时候 如果时序不能乱的话,禁止中断就是了。 好像一般 ...
主要这个是单线控制的 我这还没刷新64个像素点 就被中断了 中断时间超过24us的话再送数据就认为是下一帧的数据了 Jack315 发表于 2014-12-21 18:32 static/image/common/back.gif
ws2812 的控制要用定时器,否则无法保证时序的。
LZ 晒下N多定时器都干啥去了? ...
串口中断必须设为最高优先级 一直在接收数据 外部中断用了一个检测外部脉冲变化次数 pca中断要通过无刷电机3根霍尔线判断电机转的方向和转速也是要即时响应 其他的是通过定时器分时执行的 现在我刷64个像素点的时候没刷完被中断时间超过24us 再送数据被认为是下一帧数据了 如果我等着刷完一帧数据的话要大约2ms 等待时间有点长 希望能指点一下 你这个刷屏一定要一次全部刷新完64个像素? 另外串口中断 可以采取BUF的形式,这样这个占用的时间就比较短了。而且串口中断 你波特率不高的情况下(列如9600), 不用最高优先级的。 检测脉冲变化次数,也是一样 数据后台处理。 另外LED 是要依靠你刷新维持显示? 还是你只刷新数据,他自己维持显示?这点就比较重要, 如果是前者,你只在需要刷新数据的时候,刷新就是了, 看了下ws2812的手册和使用方法,没有太好的解决办法,得用一个专门的定时器,并且把定时中断优先级开到最高。 个人觉得你一个IO控制64个点有点牵强,分成两个或者4个IO,那用在刷新的时间会少一些
楼主能够说下你是如何驱动WS2812的,我的灯为什么一直不亮呢,亮的话也只是绿色的。 楼主可以把代码给我发一份吗?724485809@qq.com,谢谢 我也想要一份驱动部分的zhifangs@qq.com YJCSXDL 发表于 2015-1-23 14:02
楼主能够说下你是如何驱动WS2812的,我的灯为什么一直不亮呢,亮的话也只是绿色的。 ...
用的51单片机吧应该是时序不对 楼主我想要驱动代码,1663931967@qq.com 这个大哥,小弟最近也在学习单片机怎么控制WS2812的驱动程序,麻烦这位大哥给我发一份好不,我好学习学习。 太激动了,忘记留联系方式了。492143961@qq.com 求楼主一份代码,自己编了一份时序用示波器总不对,崩溃了好人一生平安{:tongue:} 把一个简单的驱动发上来就不给你们一一发了在这下载吧 这驱动还是比较简单的,uS级,用51mcu很难保证时序准确.
感觉驱动前后一定要加关中断和开中断.
关中断2mS,这么长时间应该会对很多中断造成影响.这没什么好办法. 怎样联系LZ
页:
[1]
2