STC89C52RC控制WS2812B LED 調色調光(一)
前言
一直想自己做一個LED的檯燈,能夠實現三色調節和光暗調節,搜尋了下淘寶裡的可調LED燈發現要麼是隻能調光暗,無法做到單色的調節,要麼就是可以能實現調各種顏色,但是是無線的,多出一個遙控器是什麼鬼...我只是想在臺燈的底座上開三個孔,連上旋鈕實現調色和調光啊,多一個遙控器不像話啊,看來只能自己實現了。
一通翻箱倒櫃,發現5年前買的51開發板還在,就差一個能控的LED模組了!又一通搜尋,發現一款WS2812B的LED控制模組好像挺符合我的需求的,但是網上發的程式要麼是STM32的,要麼是15系列的晶片的,沒有我手頭上51的,看來還是得自己手動來調了。
WS2812B資料
主要特點
- 智慧反接保護,電源反接不會損壞IC。
- IC控制電路與LED點光源公用一個電源。
- 控制電路與RGB晶片整合在一個5050封裝的元器件中,構成一個完整的外控畫素點。
- 內建訊號整形電路,任何一個畫素點收到訊號後經過波形整形再輸出,保證線路波形畸變不會累加。
- 內建上電覆位和掉電覆位電路。
- 每個畫素點的三基色顏色可實現256級亮度顯示,完成16777216種顏色的全真色彩顯示,掃描頻率不低於400Hz/s。
- 序列級聯介面,能通過一根訊號線完成資料的接收與解碼。
- 任意兩點傳傳輸距離在不超過5米時無需增加任何電路。
- 當重新整理速率30幀/秒時,級聯數不小於1024點。
- 資料傳送速度可達800Kbps。
- 光的顏色高度一致,價效比高。
主要應用領域
- LED全綵發光字燈串,LED全綵模組, LED全綵軟燈條硬燈條,LED護欄管。
- LED點光源,LED畫素屏,LED異形屏,各種電子產品,電器裝置跑馬燈。
產品概述
WS2813B是一個集控制電路與發光電路於一體的智慧外控LED光源。其外型與一個5050LED燈珠相同,每個元件即為一個畫素點。畫素點內部包含了智慧數字介面資料鎖存訊號整形放大驅動電路,還包含有高精度的內部振盪器和12V高壓可程式設計定電流控制部分,有效保證了畫素點光的顏色高度一致。
資料協議採用單線歸零碼的通訊方式,畫素點在上電覆位以後,DIN端接受從控制器傳輸過來的資料,首先送過來的24bit資料被第一個畫素點提取後,送到畫素點內部的資料鎖存器,剩餘的資料經過內部整形處理電路整形放大後通過DO埠開始轉發輸出給下一個級聯的畫素點,每經過一個畫素點的傳輸,訊號減少24bit。畫素點採用自動整形轉發技術,使得該畫素點的級聯個數不受訊號傳送的限制,僅僅受限訊號傳輸速度要求。
LED具有低電壓驅動,環保節能,亮度高,散射角度大,一致性好,超低功率,超長壽命等優點。將控制電路集成於LED上面,電路變得更加簡單,體積小,安裝更加簡便。
機械尺寸(單位mm)
機械尺寸與引腳圖(單位mm)
引腳功能 :
序號 |
符號 |
管腳名 |
功 能 描 述 |
1 |
VDD |
電源 |
供電管腳 |
2 |
DOUT |
資料輸出 |
控制資料訊號輸出 |
3 |
VSS |
地 |
訊號接地和電源接地 |
4 |
DIN |
資料輸入 |
控制資料訊號輸入 |
最大額定值(如無特殊說明,TA=25℃,VSS=0V)
引數 |
符號 |
範圍 |
單位 |
電源電壓 |
VDD |
+3.5~+5.3 |
V |
邏輯輸入電壓 |
VI |
-0.5~VDD+0.5 |
V |
工作溫度 |
Topt |
-25~+80 |
℃ |
儲存溫度 |
Tstg |
-55~+150 |
℃ |
電氣引數(如無特殊說明,TA=-20~+70℃,VDD=4.5~5.5V,VSS=0V)
引數 |
符號 |
最小 |
典型 |
最大 |
單位 |
測試條件 |
輸入電流 |
II |
—— |
—— |
±1 |
µA |
VI=VDD/VSS |
高電平輸入 |
VIH |
0.7VDD |
—— |
—— |
V |
DIN,SET |
低電平輸入 |
VIL |
—— |
—— |
0.3 VDD |
V |
DIN,SET |
滯後電壓 |
VH |
—— |
0.35 |
—— |
V |
DIN,SET |
開關特性(如無特殊說明,TA=-20~+70℃,VDD=4.5~5.5V,VSS=0V)
引數 |
符號 |
最小 |
典型 |
最大 |
單位 |
測試條件 |
振盪頻率 |
Fosc |
—— |
600 |
—— |
KHz |
—— |
傳輸延遲時間 |
tPLZ |
—— |
—— |
300 |
ns |
CL=15pF,DIN→DOUT,RL=10KΩ |
下降時間 |
tTHZ |
—— |
—— |
120 |
µs |
CL=300pF,OUTR/OUTG/OUTB |
輸入電容 |
CI |
—— |
—— |
15 |
pF |
—— |
LED 特性引數
資料傳輸時間( 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的順序傳送資料。
典型應用電路:
以上內容複製貼上。。。來源https://wenku.baidu.com/view/25f176db482fb4daa48d4ba1.html,還有英文版https://wenku.baidu.com/view/76a0294580eb6294dc886c4d.html
主要注意以下幾個點:
1.傳送的01資料流一定要跟規格書走;誤差不能超過150ns,51微控制器的頻率小一點的晶振可能根本達不到這個要求,所以我採用 了一顆24M晶振,並且在ISP下載工具中打開了,使頻率翻了一倍,大概48M,那麼一條指令的大概時間就 是6/24M=0.25µs,勉強夠用。
2.傳送的24位資料一定注意傳送的順序,文件中的要求是先發綠色色值,並且是從高位開始傳送;
3.傳送資料時有多少個燈要傳送多少個24位顏色值,而且2個24位顏色值之間時間間隔不能超過50µs,否則,模組會把這個24位 數當做是第一個燈的資料;
4.嗯,想起來再補充;
關鍵思路
先實現能調光,而想要調光,那麼肯定要有一個電位器進行調節,然後通過ADC模組來讀入值,再轉化後傳送到ws2812b模組。嗯,直接先用51開發板上的ADC模組來除錯吧。
51開發板上自帶的ADC模組,J2直接短接34腳,使用電位器來調節。
ADC模組程式碼開發板已經自帶了,直接拿來使用,不在本文的關鍵內容中,不做贅述!
ws2812b有四口,一個VCC,一個GND,一個DATA IN,一個DATA OUT。51與ws2812b的連線電路很簡單,P0.0口上拉一個10K電阻後與ws2812b的data in口連線,ws2812b的電源地端與51的電源共地,電源的+-之間並一個100uf的電容,搞定!
相關程式碼
注意,以下程式碼都是在stc89c52rc,晶振為24M,開啟使能6T功能下測試成功,P0口上拉電阻,接ws2812b的data in端,其他條件下需要自己做程式碼上的調整!
(1)寫入一位資料時序:
/*寫入資料時序*/
void Send_A_bit(uchar VAL)
{
if (VAL==1)
{
Send_Dat=1;
_nop_();//兩個nop,大概是0.5us,經測試,傳送完1後的延時最重要
_nop_();
Send_Dat=0;
}
else
{
Send_Dat=1;
_nop_(); //一個nop,大概是0.25us
Send_Dat=0;
}
}
(2)傳送一個燈的24位資料:
//儲存一個轉化後的RGB2進位制數 共24bits
struct My_24bits //結構體
{
uchar G_VAL; //綠色 0-255
uchar R_VAL; //紅色 0-255
uchar B_VAL; //藍色0-255
};
/*傳送24位字元(包含RGB資訊各8位)*/
void Send_24bits(struct My_24bits RGB_VAL)
{
uchar i;
for(i=0; i<8; i++)
{
Send_A_bit(RGB_VAL.G_VAL>>(7-i)&0x01);//注意是從高位先發
}
for(i=8; i<16; i++)
{
Send_A_bit(RGB_VAL.R_VAL>>(15-i)&0x01);
}
for(i=16; i<24; i++)
{
Send_A_bit(RGB_VAL.B_VAL>>(23-i)&0x01);
}
}
(3)ADC轉換程式碼,不是重點,可以下載後檢視,略;
以上,實現了電位器對led燈亮度進行調節,可以對ws2812b模組進行很好的瞭解與熟悉。因為此部分只能調光,不能對單色進行調節,下部分會把ADC模組替換掉,改用EC11編碼器,就可以對單色逐一調節,然後用上EEPROM儲存顏色值,斷電重啟能記憶上次顏色值。嗯,EC11還沒買,沒有示波器,只能純手調,看運氣和人品了。。。
完整程式碼:https://download.csdn.net/download/yaleond/10749279