查看:
11048
回复: 9 |
RGB全彩WS2812单线驱动8位MCU实现
|
|||
阿波电子
3
主题
18
回复 |
发表于2022-01-25 14:32:56
|
只看该作者
1#
电梯直达
目前RGB全彩LED灯带WS2812驱动芯片,相信有不少人都用过,大家对这款彩色LED真的是又爱又恨,爱的是它它使用简单,采用单总线通信方式,节约IO口,而且可以多级串联。而普通的彩色LED不是共阴就是共阳,每个颜色一个引脚,一般都是用PWM驱动,想要控制亮度、颜色就要分别控制每个引脚上的PWM占空比,想要驱动多个LED就更麻烦了。恨的是WS2812对时序的要求比较高,对低速单片机不太友好。今天我们就详细谈一谈WS2812的驱动。 下面先看一个规格书:
从上面规格书可以看出,要想驱动WS2812这颗芯片,对于8位机来说就必须得采用汇编代码来实现,8位单片机通常最高晶振就是16M,如果按1T来算,一个NOP指令就占用了1/16微秒,WS2812的电平驱动时间是0.3与0.9微秒,也就是0.3就是4.8/14.4个NOP时间,如果按2T来算,一个NOP指令就占用了1/8微秒,WS2812的电平驱动时间是0.3与0.9微秒,也就是0.3就是2.4/7.2个NOP时间,在这期间内还得完成数据的传送,还有传送数据个数的比较,且现在用汇编代码的人并不多了,所以今天我已经把WS2812驱动已经做成了一个子函数了,只需要用C语言编程中直接调用就可以了。 一、1T 51内核16M晶振的8位MCU实现(锦锐CA51F251) 1、变量定义: u08 grb[18]; //6个RGB灯,6*3=18,内存空间够的话,可以定义更多个灯。 2、子程序文件名:WS2812.A51。 3、函数声明:void ws2812(u08 *p,u08 n); //指针*p指向要传送的数据组,本文指grb[18],n代表要传送数据的个数,本文18个。 4、函数调用: Disable interrupt; ws2812(&grb[0],18); Enable interrupt; 5、ROM空间:46个字节。 6、代码运行时间:190微秒。 二、2T 51内核16M晶振的8位MCU实现(现代MC96F6432) 1、变量定义: u08 grb[18]; //6个RGB灯,6*3=18,内存空间够的话,可以定义更多个灯。 2、子程序文件名:WS2812.A51。 3、函数声明:void ws2812(u08 *p,u08 n); //指针*p指向要传送的数据组,本文指grb[18],n代表要传送数据的个数,本文18个。 4、函数调用: Disable all interrupt; ws2812(&grb[0],18); Enable all interrupt; 5、ROM空间:140个字节。 6、代码运行时间:190微秒。 三、2T RISC内核16M晶振的8位MCU实现(盤芯M8P626) 1、变量定义: u08 grb[18]; //6个RGB灯,6*3=18,内存空间够的话,可以定义更多个灯。 u08 grb_a; u08 grb_cnt; 2、子程序文件名:ws2812(void) 3、函数调用: for (I = 0;I < 18;i++) grb[i] = 0x80; grb_cnt = 18; ws2812(); 4、ROM空间:60个字节。 5、代码运行时间:190微秒。 四、2T RISC内核16M晶振的8位MCU实现(辉芒微FT-61F021B) 1、变量定义: u08 grb[18]; //6个RGB灯,6*3=18,内存空间够的话,可以定义更多个灯。 u08 grb_a; u08 grb_cnt; 2、子程序文件名:ws2812(void) 3、函数调用: for (I = 0;I < 18;i++) grb[i] = 0x80; grb_cnt = 18; ws2812(); 4、ROM空间:60个字节。 5、代码运行时间:190微秒。 五、2T RISC内核16M晶振的8位MCU实现(应广PMS150C) 1、变量定义: u08 grb[18]; //6个RGB灯,6*3=18,内存空间够的话,可以定义更多个灯。 u16 point; u08 grb_cnt; 2、子程序文件名:ws2812(void) 3、函数调用: grb[0] = 0x80; grb[1] = 0x80; …… grb[16] = 0x80; grb[17] = 0x80; grb_cnt = 18; ws2812(); 4、ROM空间:60个字节。 5、代码运行时间:190微秒。
以上是我花了较长时候实现了的代码,用0.1元的应广PMS150C就可以实现低成本驱动,并制作出了DEMO板。 2-9-0-0-5-6-1-7-3 A-B-1-4-2-8-5-7-B-A
AB142857WYB
|
|||
阿波电子
3
主题
18
回复 |
发表于2022-01-25 15:04:09
|
只看该作者
2#
8位单片机,只要满足晶振16M 2T以上的都以实现,目前已经实现的8位机有应广的PMS150C、辉芒微、盤芯的M8P626、锦锐CA51F251、现代MC96F6432A这几家的,像其它家8051内核的松瀚、中颖、中微、芯唐、芯圣、比亚迪、博巨兴、恩狄、合泰、宏晶、昴宝、赛元、笙泉、芯联发、中基国威等都是可以实现的。
AB142857WYB
|
|||
阿波电子
3
主题
18
回复 |
发表于2022-01-25 19:19:58
|
只看该作者
3#
AB142857WYB
|
|||
大师史蒂芬师傅
0
主题
1
回复 |
发表于2022-05-10 17:58:58
|
只看该作者
4#
可以求源码吗?
|
|||
阿波电子
3
主题
18
回复 |
发表于2022-07-11 11:07:44
|
只看该作者
5#
AB142857WYB
AB142857WYB
|
|||
mycnnc
0
主题
1
回复 |
发表于2022-07-13 15:55:25
|
只看该作者
6#
您好,已经做好成品板了吗
|
|||
明哥lxm
0
主题
1
回复 |
发表于2022-11-14 09:06:02
|
只看该作者
7#
不会汇编的我自学汇编也搞出来了
|
|||
阿波电子
3
主题
18
回复 |
发表于2022-11-21 16:10:05
|
只看该作者
8#
高手
AB142857WYB
|
|||
阿迪斯25
0
主题
34
回复 |
9#
HOLTEK/合泰MCU, Amiccon/笙科 无线IC, Tontek/通泰 触摸IC 优势供应,技术支持,欢迎联系:18576740188 ,Q 1971885589
|
|||
南柯一梦黄粱
0
主题
1
回复 |
10#
可以求源码吗?
|
|