查看:
9978
|
回复:
9
|
RGB全彩WS2812单线驱动8位MCU实现
|
|
发表于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
|
|
10#
可以求源码吗?
|
|