xxkj2010
发表于 2023-11-30 11:11:01
空某人 发表于 2023-10-9 20:49
灯的亮度是如何改变的?比如一个红色是11111111,如果发送11111110是不是就要暗一些 ...
发送0x000000不发光,发送0x010101(白色)亮度最低,发送0xffffff(白色)亮度最高。
xxkj2010
发表于 2023-12-1 08:46:12
我用STC8H8K64U-TSSOP20,内部IRC 主时钟 24000000L。
用楼主的void WS2812_bit(bit data_bit),
时序好像不太准确,因为测试的结果与楼主的不一样。
不知道为什么,我有空再用逻辑分析仪测一下脉冲宽度。
//====================================================================
//发送 0,1码时序,此时序由逻辑分析仪拉波形得出,时间上准确无误
//复位 300ns以上
//1码 高电平750ns-1.6us 低电平220ns-420ns (0.85us,0.4us)
//0码 高电平220ns-420ns 低电平750ns-1.6us (0.4us,0.85us)
//====================================================================
void WS2812_bit(bit data_bit)
{
if(data_bit)//0.85,0.4us
{
ws2812b_IO=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
ws2812b_IO=0;
}
else//0.4,0.85
{
ws2812b_IO=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
ws2812b_IO=0;
_nop_();_nop_();_nop_();_nop_();
}
}
lijinlei
发表于 2023-12-3 18:17:30
老哥,我买的32MHz晶振已经到货了,刚装到STC89C52上尝试了一下,可以驱动,这是我发的帖子,STC89C52RC驱动WS2812灯带,但是不知道怎么制作呼吸灯,求指导~
lijinlei
发表于 2023-12-3 21:05:44
亲测代码有效,改了一下呼吸时间,效果很不错~
xxkj2010
发表于 2023-12-4 18:39:01
可以用了,就是直接使用楼主的代码,原来我的项目是启用USB的,我只是把楼主的代码添加到项目中。
感谢楼主的分享!
xxkj2010
发表于 2023-12-4 18:46:53
请问楼主,如果项目中有开启某些中断,在驱动WS2812时,是不是需要暂时关闭全部中断,以免影响时序?
小帝
发表于 2023-12-6 00:06:38
硬件是怎么样的呀{:4_190:}
神农鼎
发表于 2024-1-9 08:47:04
SPI方案:
只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的,MISO、SCLK不能做它用。本例使用P1.3-MOSI输出驱动信号,用户可以切换到别的脚。
===将 MISO 不做其他用途;
===将 MISO管脚 先设置为对外输出0;
===MOSI 发送完成后,对外停止时输出的是 MISO 读到的状态, 0 ,这 STC-R&D 留了这么个绝活支持 WS2812B !!!
晓飛飛
发表于 2024-3-11 16:12:39
实测没毛病,一次点亮{:victory:}
摇滚一族
发表于 2024-3-30 22:47:29
void WS2812_rand_color(u8 R,u8 G,u8 B)
{
SendData(G);
SendData(R);
SendData(B);
}
void DisP_Color(u32 dat)
{
WS2812_rand_color(dat>>8,dat,dat>>16);
}
这里RGB三色我测试了是错乱的,不知楼主有没有注意