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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15286|回復: 9
打印 上一主題 下一主題
收起左側

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的順序發送數據。
典型應用電路:



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:373838 發表于 2018-11-16 10:08 | 只看該作者
一樣,色彩完全不受控制。全亮白光!
回復

使用道具 舉報

地板
ID:437369 發表于 2018-12-29 21:02 | 只看該作者
樓主,我的一只亮紅光,咋辦呀
回復

使用道具 舉報

5#
ID:21069 發表于 2018-12-30 20:49 | 只看該作者
先頂起!大家都在努力中!,不過晶振11.0592mhz是不行的,最起碼要24MHZ

評分

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

查看全部評分

回復

使用道具 舉報

6#
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();
        }
}
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

9#
ID:516874 發表于 2021-1-22 13:36 | 只看該作者
本帖最后由 dzzsz2019 于 2021-1-28 14:09 編輯

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

回復

使用道具 舉報

10#
ID:390416 發表于 2021-2-22 20:18 | 只看該作者
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品久久 | 欧美精品综合 | 久久视频精品在线 | av网站在线播放 | 久久精品国产亚洲一区二区三区 | 国产超碰人人爽人人做人人爱 | 青青久视频 | 成人免费一区二区 | www.久久国产精品 | 啪啪综合网| 国产高清视频一区二区 | 女人av | 亚洲自拍偷拍视频 | 日韩欧美国产一区二区 | 日本一区二区三区免费观看 | 99精品在线| 日韩中文字幕在线视频 | 色av一区二区 | 国产精品不卡 | 国产小视频在线观看 | 一级黄色在线 | 日韩一二区 | 久久综合久色欧美综合狠狠 | 在线视频中文字幕 | 欧美一级www片免费观看 | 亚洲免费片 | 亚洲精品日韩欧美 | 羞羞网站在线观看 | 亚洲图片一区二区三区 | 青青久久| 色999视频 | 日韩α片| 日韩一区二区在线观看 | 九九99精品 | 欧美日韩大片 | av在线伊人 | 中文字幕一区二区三区日韩精品 | 天堂网色| 亚洲精品欧美 | 国产日产精品一区二区三区四区 | 中文字幕av在线 |