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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15203|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精精久久 | 一级毛片在线视频 | 久久久一区二区三区四区 | 日韩欧美亚洲综合 | 97精品超碰一区二区三区 | 黄色电影在线免费观看 | 久久三区 | 国产偷录视频叫床高潮对白 | 视频一区二区在线观看 | 97在线观视频免费观看 | 黄色网址在线播放 | 在线一区视频 | www.99热.com| 欧美精品啪啪 | 97视频在线免费 | 亚洲一区久久 | 日本高清不卡视频 | 国产美女精品 | 国产成人精品久久二区二区91 | 四色成人av永久网址 | 91久久精品国产 | 欧美日韩亚洲在线 | 日本黄色短片 | 亚洲国产欧美日韩 | 最近日韩中文字幕 | 成人在线观看免费视频 | 一级一级毛片免费看 | 国产欧美一区二区三区在线看蜜臀 | 久久久久国产精品午夜一区 | 午夜影院在线观看 | 偷偷操视频 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 一区二区在线 | 国产高清在线精品 | 亚洲色图婷婷 | 夜夜艹| 无毛av| 国产乱码精品一区二区三区五月婷 | 超碰成人免费观看 | 日韩精品视频在线观看一区二区三区 | www4虎|