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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15567|回復: 9
收起左側

WS2812B燈珠RGB調色單片機程序,只是能亮,完全不受控制

  [復制鏈接]
ID:373838 發表于 2018-10-19 15:13 | 顯示全部樓層 |閱讀模式
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的順序發送數據。
典型應用電路:



回復

使用道具 舉報

ID:233756 發表于 2018-11-2 14:36 | 顯示全部樓層
樓主解決了嗎?我用STM32,再示波器上看時序都是對的 ,就是顏色完全不受控制。。。
回復

使用道具 舉報

ID:373838 發表于 2018-11-16 10:08 | 顯示全部樓層
一樣,色彩完全不受控制。全亮白光!
回復

使用道具 舉報

ID:437369 發表于 2018-12-29 21:02 | 顯示全部樓層
樓主,我的一只亮紅光,咋辦呀
回復

使用道具 舉報

ID:21069 發表于 2018-12-30 20:49 | 顯示全部樓層
先頂起!大家都在努力中!,不過晶振11.0592mhz是不行的,最起碼要24MHZ

評分

參與人數 1黑幣 +35 收起 理由
shuisheng + 35

查看全部評分

回復

使用道具 舉報

ID:423345 發表于 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();
        }
}
回復

使用道具 舉報

ID:575533 發表于 2019-7-20 11:11 | 顯示全部樓層
雖然是挖墳 但我也找了好多資料才研究到規律  想炫耀一下
第一點  nop數量為(1/(晶頻))我的是33.1776  所以每條nop需要(1 / 33.1776)us
第二點  盡量用減法  減法比加法省時間  nop數會更準確
第三點  用#define    比調用函數省時間  nop數會更準確

亮白點因為nop數不對 延遲時間不對
不符合燈條的要求
回復

使用道具 舉報

ID:190075 發表于 2019-11-19 15:05 | 顯示全部樓層
漢神俊 發表于 2019-7-20 11:11
雖然是挖墳 但我也找了好多資料才研究到規律  想炫耀一下
第一點  nop數量為(1/(晶頻 ...

第一點怎么算,他不是分0和1嗎,怎么分配
回復

使用道具 舉報

ID:516874 發表于 2021-1-22 13:36 | 顯示全部樓層
本帖最后由 dzzsz2019 于 2021-1-28 14:09 編輯

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

回復

使用道具 舉報

ID:390416 發表于 2021-2-22 20:18 | 顯示全部樓層
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产主播第一页 | 91传媒在线观看 | 中文精品视频 | 欧美成视频 | 国产精品免费一区二区三区四区 | 国产一级在线观看 | 午夜大片 | 午夜影院在线观看视频 | 91在线观看 | 精品视频在线免费观看 | 超碰高清 | 中文字幕精品一区二区三区在线 | 国产精品久久久久久久久久久久久久 | 欧美三级在线 | www.伊人.com| 欧美精品在线一区二区三区 | 亚洲一区中文字幕 | 精品一区av | 亚洲综合成人网 | 99精品久久久国产一区二区三 | 国产综合视频 | 最新午夜综合福利视频 | 国产精品不卡视频 | 精品一区二区三区四区五区 | 欧美中文在线 | 一区视频在线免费观看 | 日韩欧美第一页 | 国产精品一区二区三区在线 | 日日天天| 国内自拍第一页 | 不卡av电影在线播放 | 亚洲美女视频 | 一区二区免费高清视频 | 国产精品久久精品 | 成人妇女免费播放久久久 | 精品久久久久久亚洲精品 | 久久久人成影片一区二区三区 | jvid精品资源在线观看 | 亚洲一区二区免费看 | 久久久妇女国产精品影视 | 亚洲天堂中文字幕 |