久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: WS2812B燈珠RGB調色單片機程序,只是能亮,完全不受控制 [打印本頁]

作者: 大飛0011    時間: 2018-10-19 15:13
標題: 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以上

時序波形圖


WS2812B
輸入碼型:
連接方法:


WS2812B


WS2812B
數據傳輸方法:
注:其中D1為MCU端發送的數據,D2、D3、D4為級聯電路自動整形轉發的數據。
24bit數據結構:
G7
G6
G5
G4
G3
G2
G1
G0
R7
R6
R5
R4
R3
R2
R1
R0
B7
B6
B5
B4
B3
B2
B1
B0
注:高位先發,按照GRB的順序發送數據。
典型應用電路:




作者: omikeai    時間: 2018-11-2 14:36
樓主解決了嗎?我用STM32,再示波器上看時序都是對的 ,就是顏色完全不受控制。。。
作者: 大飛0011    時間: 2018-11-16 10:08
一樣,色彩完全不受控制。全亮白光!
作者: 王靈    時間: 2018-12-29 21:02
樓主,我的一只亮紅光,咋辦呀
作者: jinsheng7533967    時間: 2018-12-30 20:49
先頂起!大家都在努力中!,不過晶振11.0592mhz是不行的,最起碼要24MHZ
作者: Alen-sjg    時間: 2019-4-18 13:07
控制時序沒有寫對,我發個測試程序給你參考:
#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();
        }
}
作者: 漢神俊    時間: 2019-7-20 11:11
雖然是挖墳 但我也找了好多資料才研究到規律  想炫耀一下
第一點  nop數量為(1/(晶頻))我的是33.1776  所以每條nop需要(1 / 33.1776)us
第二點  盡量用減法  減法比加法省時間  nop數會更準確
第三點  用#define    比調用函數省時間  nop數會更準確

亮白點因為nop數不對 延遲時間不對
不符合燈條的要求
作者: a8619300    時間: 2019-11-19 15:05
漢神俊 發表于 2019-7-20 11:11
雖然是挖墳 但我也找了好多資料才研究到規律  想炫耀一下
第一點  nop數量為(1/(晶頻 ...

第一點怎么算,他不是分0和1嗎,怎么分配
作者: dzzsz2019    時間: 2021-1-22 13:36
本帖最后由 dzzsz2019 于 2021-1-28 14:09 編輯

用邏輯分析儀看看時序,注意的是一個燈珠的24信號 ,每8bit后要增加1個bit的低電平時間,每個燈珠要增加2個bit的低電平時間
最近也在做led的控制程序,發現有些帶自控的芯片,當在一定時間沒控制信號輸入時,就轉入自控程序,這個時間大概有7-8ms。所以如果發現led不受控,可以提高刷新率,以免芯片進入自控程序而造成不受控的現 象。


作者: 人人學會單片機    時間: 2021-2-22 20:18
89C52驅動WS2812 http://m.zg4o1577.cn/bbs/dpj-170855-1.html




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天天操 | 国产一区二区欧美 | 97国产超碰 | 亚洲天堂中文字幕 | 少妇av | 精品亚洲一区二区三区 | 午夜影院黄 | 亚洲精品乱码 | 黄色大片在线免费观看 | 三级黄视频 | 欧美一级片| 激情影院在线观看 | 国产aⅴ爽av久久久久成人 | www国产亚洲精品久久网站 | 在线观看国产一区二区 | 91av免费在线观看 | 激情丁香婷婷 | 免费黄网站在线观看 | 午夜黄色小视频 | 国产日韩精品一区二区 | 黄色片视频 | 另类小说第一草 | 国产精品欧美一区二区 | 18色av| 91av免费 | 国产三级做爰高清在线 | 色天天综合| 天天撸夜夜操 | 久草视频观看 | 蜜桃av一区二区三区 | 成人激情在线观看 | 成人在线免费视频观看 | 黄色成人毛片 | 高清免费av | 欧美日韩精品一区 | 欧美色图一区二区三区 | 亚洲精品不卡 | 久久精品视频免费看 | 日本不卡在线 | 日韩在线不卡视频 | 日本黄a三级三级三级 |