WS2812B灯珠RGB调色单片机程序,只是能亮,完全不受控制,MCU型号为:STC12C5A60S2,晶振11.0592mhz现在想点亮一个WS2812B的rgb灯珠调色!但试了好多程序案例,但只是能亮,完全不受控制!求大神分享一下设计思路
WS2812B参数如下:
数据传输时间( TH+TL=1.25μs±600ns)
T0H
|
0码, 高电平时间
|
0.4μs
|
±150ns
|
T1H
|
1码, 高电平时间
|
0.8 μs
|
±150ns
|
T0L
|
0码, 低电平时间
|
0.85μs
|
±150ns
|
T1L
|
1码, 低电平时间
|
0.45 μs
|
±150ns
|
RES
|
帧单位,低电平时间
|
50μs以上
|
G7
|
G6
|
G5
|
G4
|
G3
|
G2
|
G1
|
G0
|
R7
|
R6
|
R5
|
R4
|
R3
|
R2
|
R1
|
R0
|
B7
|
B6
|
B5
|
B4
|
B3
|
B2
|
B1
|
B0
|
,楼主解决了吗?我用STM32,再示波器上看时序都是对的 ,就是颜色完全不受控制。。。,一样,色彩完全不受控制。全亮白光!,楼主,我的一只亮红光,咋办呀,先顶起!大家都在努力中!,不过晶振11.0592mhz是不行的,最起码要24MHZ,控制时序没有写对,我发个测试程序给你参考:
#include “IAP15F105W.h”
#include “intrins.h”
typedef unsigned char uchar;
typedef unsigned int uint;
#define Number 20
sbit DAI=P3^2;
void Delay (uint x) // 1ms Delay
{
uint t;
t = 0;
while (x–)
{
WDT_CONTR|=0x10;
for (t = 0; t < 175; t++);
}
}
void send_2811_24bits(uchar dat1,uchar dat2,uchar dat3) // ·¢?íêy?Y
{
uchar a,b;
for(a=0;a<8;a++) //dat1
{
if(dat1&0x80)
{
DAI=1; // CODE “1”
for(b=0;b<2;b++)
{
_nop_(); _nop_();
}
DAI=0;
}
else
{
DAI=1; //CODE “0”
for(b=0;b<1;b++);
DAI=0;
for(b=0;b<1;b++);
}
dat1=dat1<<1;
}
for(a=0;a<8;a++) //dat2
{
if(dat2&0x80)
{
DAI=1; // CODE “1”
for(b=0;b<2;b++)
{
_nop_(); _nop_();
}
DAI=0;
}
else
{
DAI=1; //CODE “0”
for(b=0;b<1;b++);
DAI=0;
for(b=0;b<1;b++);
}
dat2=dat2<<1;
}
for(a=0;a<8;a++) //dat3
{
if(dat3&0x80)
{
DAI=1; // CODE “1”
for(b=0;b<2;b++)
{
_nop_(); _nop_();
}
DAI=0;
}
else
{
DAI=1; //CODE “0”
for(b=0;b<1;b++);
DAI=0;
for(b=0;b<1;b++);
}
dat3=dat3<<1;
}
}
void rst()
{
uchar s;
DAI=0;
WDT_CONTR|=0x10;
for(s=0;s<50;s++);
}
void Flowing()
{
uint i;
uint Stack;
Stack=0;
while(1)
{
for(i=0;i<Stack;i++)
{
send_2811_24bits(255,255,255);
}
for(i=0;i<Number-Stack;i++)
{
send_2811_24bits(0,0,0);
}
rst();
Delay(1000);
Stack++;
if(Stack>Number)
{
break;
}
}
}
void main()
{
P3M0=0x04;
P3M1=0x00;
P32=0;
WDT_CONTR=0x3F;
while(1)
{
Flowing();
}
},虽然是挖坟 但我也找了好多资料才研究到规律 想炫耀一下
第一点 nop数量为(1/(晶频))我的是33.1776 所以每条nop需要(1 / 33.1776)us
第二点 尽量用减法 减法比加法省时间 nop数会更准确
第三点 用#define 比调用函数省时间 nop数会更准确
亮白点因为nop数不对 延迟时间不对
不符合灯条的要求,
汉神俊 发表于 2019-7-20 11:11
虽然是挖坟 但我也找了好多资料才研究到规律 想炫耀一下
第一点 nop数量为(1/(晶频 …
第一点怎么算,他不是分0和1吗,怎么分配