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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11803|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

DMX512轉(zhuǎn)WS2812面板燈單片機(jī)源程序等制作資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:290266 發(fā)表于 2018-4-18 15:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
WS2812面板燈制作教程!

視頻效果展示:

功能描述
電腦上,使用MADRIX 2.0 軟件,讀取聲卡數(shù)據(jù)并轉(zhuǎn)換成頻譜圖像,通過USB口發(fā)送給MADRIX板子,轉(zhuǎn)換成DMX512協(xié)議,送入面板燈。再由STC8單片機(jī)解碼,發(fā)送給WS2812燈珠,顯示出和電腦上一模一樣的圖像。
同類方案廣泛應(yīng)用于超大型酒吧、室外廣場裝飾燈等。
所需材料:
1、MADRIX軟件(學(xué)習(xí)可以使用免費(fèi)版本,如需正規(guī)使用請聯(lián)系官方購買)
2、MADRIX控制器,輸出電腦信號轉(zhuǎn)換成DMX512信號即可
3、STC單片機(jī),1KB的RAM,1KB的ROM,最好是帶兩個串口,寬電壓的穩(wěn)定。
4、MAX490芯片,用于將DMX512協(xié)議的485差分信號轉(zhuǎn)換成TTL信號
5、WS2812燈珠
6、電源,輸出電壓恒壓5V,輸出電流根據(jù)燈珠數(shù)量選擇。
關(guān)于制作:
1、原理圖請參考《WS2812面板燈原理圖》
2、PCB根據(jù)自己需要,選擇燈珠的布局形式。標(biāo)準(zhǔn)的DMX512協(xié)議最多支持170顆RGB彩燈的灰度數(shù)據(jù)。
3、STC單片機(jī)的程序,請參考《DMX512轉(zhuǎn)WS2812 面板燈程序》
4、WS2812燈珠調(diào)試,請參考《全真彩WS2812芯片LED介紹》
關(guān)于MADRIX軟件的版權(quán)
1、軟件的下載:見附件
2、軟件的授權(quán):學(xué)習(xí)或者測試,可以直接下載上面的MADRIX軟件安裝使用。公司使用請務(wù)必到MADRIX官網(wǎng)購買正版授權(quán)證明。如貴公司侵權(quán)使用,所產(chǎn)生法律責(zé)任與本文無關(guān)!軟件在為授權(quán)的情況下,只能用于調(diào)試,并且會按一定時間自動黑屏!不能用于工業(yè)項目的客戶使用!
3、安裝軟件后需要安裝驅(qū)動才能正常使用MADRIX解碼板
4、我們的MADRIX板,只支持MADRIX 2.0版本,升級后將不能正常使用!
MADRIX軟件的簡單使用
1打開軟件,按F4,搜索MADRIX設(shè)備出現(xiàn)下列OUT設(shè)備,就表示找到設(shè)備!
2再按F2,設(shè)置面板燈的布局方式,下圖是我們的13*13像素點(diǎn)的面板燈的設(shè)置
3選擇花樣
S2LEQUAlizer就是頻譜顯示,可以調(diào)節(jié)聲音顯示幅度、燈珠亮度、顯示速度等參數(shù)


電路原理圖如下:



級聯(lián)169顆燈珠,排列成13*13矩陣,總電流7A
適當(dāng)距離需要增加0.1uF電容作為電源濾波,推薦50顆電容分開放
單顆燈珠電流40毫安,單顆燈珠功耗0.2瓦


單片機(jī)源程序如下(主程序):
  1. //***********************************************************************************
  2. //1、程序適用時鐘為24M
  3. //2、DMX512的串口2,每48微秒進(jìn)入一次中斷,中斷服務(wù)里使定時器0重新計時。
  4. //3、接收完513字節(jié)后,超過1000微秒保持高電平不進(jìn)串口中斷,定時器溢出使status_flag翻轉(zhuǎn)一次。
  5. //4、如果status_flag是1,那么接下來的DMX512丟棄不用!把DMX接收的數(shù)據(jù)拷貝并發(fā)送給WS2812。
  6. //5、發(fā)送完WS2812數(shù)據(jù)后,再次允許串口2中斷,status_flag再翻轉(zhuǎn)一次,保持DMX512數(shù)據(jù)。
  7. //6、核心目的是留一幀丟一幀,保證DMX512解碼和WS2812發(fā)送,在時間上錯開。
  8. //***********************************************************************************
  9. #include "all.h"
  10. bit status_flag=1;
  11. void Timer0_Init(void)                                                                //1000微秒 24M時鐘
  12. {
  13.         AUXR &= 0x7F;                                                                        //定時器工作在12T模式
  14.         TMOD &= 0xF0;                                                                        //設(shè)置為定時器模式
  15.         TMOD |= 0x01;                                                                        //設(shè)置為定時器模式
  16.         TL0 = 0x30;                                                                                //定時器初值
  17.         TH0 = 0xF8;                                                                                //定時器初值
  18.         TF0 = 0;                                                                                //清除TF0標(biāo)志
  19.         TR0 = 1;                                                                                //啟動定時0
  20.         ET0=1;                                                                                        //允許定時器中斷
  21. }
  22. void Timer0_Routnie (void) interrupt 1 using 1
  23. {
  24.         static u8 WS2812_Write_Buffer_old;                                //無信號等待用
  25.         static u16 count;                                                                //無信號等待用
  26.         u16 i;
  27.         
  28.         status_flag=~status_flag;                                                //幀標(biāo)志位,一次DMX取反一次
  29.         if(status_flag==1)                                                                //如果是奇數(shù),下次DMX512丟棄,而發(fā)送WS2812數(shù)據(jù)
  30.         {
  31.                 WS2812_DAT=0;                                                                //先發(fā)送低電平復(fù)位時間
  32.                 IE2&=0xfe;                                                                        //關(guān)閉DMX的串口2中斷
  33.                 for(i=1;i<Pixel_Data_Num;i++)
  34.                 {
  35.                         WS2812_Write_Buffer[i]=DMX512_Read_Buffer[i];//DMX數(shù)據(jù)復(fù)制給WS2812
  36.                 }
  37.                 if(WS2812_Write_Buffer_old!=WS2812_Write_Buffer[1])//如果數(shù)據(jù)改變
  38.                 {
  39.                         count=0;                                                                //計數(shù)從0開始
  40.                         WS2812_Write_Buffer_old=WS2812_Write_Buffer[1];//刷新數(shù)據(jù)。
  41.                 }
  42.                 else                                                                                //如果數(shù)據(jù)不改變
  43.                 {
  44.                         count++;                                                                //計時
  45.                         if(count>2417)                                                        //如果長時間數(shù)據(jù)不改變
  46.                         {
  47.                                 for(i=1;i<Pixel_Data_Num;i++)
  48.                                 {
  49.                                         WS2812_Write_Buffer[i]=0;                //說明通信故障,自動黑屏
  50.                                         DMX512_Read_Buffer[i]=0;                //說明通信故障,自動黑屏
  51.                                 }
  52.                         }
  53.                 }
  54.                 WS2812_Display_Ser();                                                //傳輸數(shù)據(jù)到WS2812
  55.                 IE2|=0x01;                                                                        //串口2中斷再次允許,下次保存DMX512,不發(fā)送WS2812數(shù)據(jù)
  56.         }
  57. }
  58. void main()
  59. {
  60.         u16 i;
  61.         for(i=0;i<Pixel_Data_Num;i++)
  62.         {
  63.                 WS2812_Write_Buffer[i]=0;                                        //開機(jī)先黑屏
  64.                 DMX512_Read_Buffer[i]=0;                                         //開機(jī)先黑屏
  65.         }
  66.         DMX_Init();               
  67.         P1M0=0;P3M0=0;
  68.         P1M1=0;P3M1=0;
  69.         WS2812_Init();
  70.         Timer0_Init();
  71.         EA=1;
  72.         while(1);
  73. }
復(fù)制代碼

DMX512_Drive.c
  1. #include "all.h"
  2. u8 xdata DMX512_Read_Buffer[Pixel_Data_Num];
  3. //**********************************************
  4. //        DMX512初始化串口與定時器 24M
  5. //**********************************************
  6. void DMX_Init()
  7. {
  8.         S2CON = 0xD0;                //9位數(shù)據(jù),波特率可設(shè)置
  9.         AUXR &= 0xFB;                //定時器2工作在12T模式
  10.         T2L = 0xFE;                        //定時器2初值
  11.         T2H = 0xFF;                        //定時器2初值
  12.         AUXR |= 0x10;                //啟動定時器2
  13.         IE2|=0x01;                        //串口2中斷允許
  14. }
  15. //**********************************************
  16. //        串口2的中斷服務(wù)函數(shù)  S2RI=1才能進(jìn)入中斷服務(wù)
  17. //**********************************************
  18. void Uart2_Routnie (void) interrupt 8 //using 1
  19. {
  20.         static u16 data DMX_count;
  21.         TL0 = 0x30;                                                                        //定時器0重裝初值,防止定時器0中斷發(fā)生
  22.         TH0 = 0xF8;                                                                        //定時器0重裝初值,防止定時器0中斷發(fā)生
  23.         switch(S2CON&0x05)                                                        //判斷S2RB8以及S2RI
  24.         {
  25.                 case 1:DMX_count=0;S2CON&=0xf0;break;        //如果S2RB8是0,S2RI是1,清除S2RI
  26.                 case 5:                                                                        //如果S2RB8是1,S2RI是1
  27.                 {
  28.                         if(DMX_count<Pixel_Data_Num)                //只保存需要的最多字節(jié)數(shù)量
  29.                         {
  30.                                 DMX512_Read_Buffer[DMX_count]=S2BUF;//保存
  31.                         }
  32.                         DMX_count++;                                                //計數(shù)器增加
  33.                 }
  34.                 S2CON&=0xf0;                                                        //清除S2RI                                                
  35.                 break;
  36.         }
  37. }
復(fù)制代碼

WS2812_Drive.c
  1. #include "all.h"
  2. u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
  3. //**********************************************
  4. //        WS2812初始化
  5. //**********************************************
  6. void WS2812_Init()
  7. {
  8.                 WS2812_DAT=1;                                                        //拉高
  9. }
  10. //**********************************************
  11. //        WS2812 發(fā)送數(shù)據(jù)  0.5625us是高電平的界限。發(fā)0高電平不能超過0.5625
  12. //**********************************************
  13. void WS2812_Write_Data(u8 *Point,u8 len)
  14. {        
  15.            u8 data i,j,k,Value;
  16.         for(i=0;i<len;i++)                                                        //多少個RGB燈就發(fā)送多少次
  17.         {
  18.                 for(j=0;j<3;j++)                                                //每個燈是R G B 三種顏色數(shù)據(jù)
  19.                 {
  20.                         switch(j)                                                        //紅綠調(diào)換位置。
  21.                         {
  22.                                 case 0:Value=*(Point+1);break;
  23.                                 case 1:Value=*(Point);break;
  24.                                 case 2:Value=*(Point+2);break;
  25.                         }
  26.                         for(k=0;k<8;k++)                                        //每個數(shù)據(jù)是8位
  27.                         {
  28.                                 WS2812_DAT=1;                                          
  29.                                 if(Value&0x80)                                        //判斷數(shù)據(jù)是不是1
  30.                                 {
  31.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  32.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  33.                                         WS2812_DAT=0;                                 //0.35us
  34.                                         //_nop_();_nop_();
  35.                                 }
  36.                                 else
  37.                                 {        
  38.                                         WS2812_DAT=0;                                 //1.36us
  39.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  40.                                         _nop_();_nop_();_nop_();_nop_();_nop_();
  41.                                        
  42.                                                                                     
  43.                                 }
  44.                                 Value<<=1;        
  45.                         }
  46.                 }
  47.                 Point+=3;//指針加加               
  48.         }        
  49. ……………………

  50. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
WS2812面板燈制作資料.zip (7.71 MB, 下載次數(shù): 289)


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

使用道具 舉報

沙發(fā)
ID:166422 發(fā)表于 2018-4-21 13:30 | 只看該作者
還是有點(diǎn)瑕疵啊,要是能做到不跑幀就完美了。樓主可以試試帶DMA的mcu試試
回復(fù)

使用道具 舉報

板凳
ID:340530 發(fā)表于 2018-5-29 13:28 | 只看該作者
正在找,好用不
回復(fù)

使用道具 舉報

地板
ID:202754 發(fā)表于 2018-8-10 14:42 | 只看該作者
正在學(xué)習(xí)該協(xié)議,謝謝
回復(fù)

使用道具 舉報

5#
ID:3802 發(fā)表于 2018-10-15 17:01 | 只看該作者
正在找,好用不
回復(fù)

使用道具 舉報

6#
ID:127971 發(fā)表于 2018-12-3 13:39 | 只看該作者
正在學(xué)習(xí)這個協(xié)議,資料具有參考價值。
回復(fù)

使用道具 舉報

7#
ID:414738 發(fā)表于 2019-8-22 11:28 | 只看該作者
工程很多錯誤,編譯不能通過
回復(fù)

使用道具 舉報

8#
ID:796897 發(fā)表于 2020-7-5 00:26 | 只看該作者
謝謝樓主,非常詳細(xì)的資料
回復(fù)

使用道具 舉報

9#
ID:706724 發(fā)表于 2020-11-2 19:44 | 只看該作者
感謝樓主的不辭辛苦的分享
回復(fù)

使用道具 舉報

10#
ID:240020 發(fā)表于 2021-6-3 10:19 | 只看該作者
樓主的Madrix控制器是哪里的,我正想自己做一個來玩
回復(fù)

使用道具 舉報

11#
ID:588322 發(fā)表于 2021-7-7 22:05 | 只看該作者
很有參考價值,學(xué)習(xí)了
回復(fù)

使用道具 舉報

12#
ID:56876 發(fā)表于 2021-7-25 16:53 | 只看該作者
aolin 發(fā)表于 2021-6-3 10:19
樓主的Madrix控制器是哪里的,我正想自己做一個來玩

支持MADRIX軟件的控制器我這里有,該控制器支持DMX512和W2812信號的輸出。論壇私信我

回復(fù)

使用道具 舉報

13#
ID:263693 發(fā)表于 2021-9-7 12:49 | 只看該作者
51的架構(gòu)好像沒有DMA
回復(fù)

使用道具 舉報

14#
ID:356512 發(fā)表于 2023-8-29 01:01 | 只看該作者
stc8.h
stc8.rar (2.91 KB, 下載次數(shù): 6)
回復(fù)

使用道具 舉報

15#
ID:433219 發(fā)表于 2023-8-29 20:02 | 只看該作者
luokuipeng 發(fā)表于 2021-9-7 12:49
51的架構(gòu)好像沒有DMA

都是增強(qiáng)型51后來加的,例如stc8h、stc32g,都有DMA了
回復(fù)

使用道具 舉報

16#
ID:433219 發(fā)表于 2024-5-30 16:14 | 只看該作者
界面很現(xiàn)代科幻 Madrix控制器
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区国产精品 | 国产精品久久久久久久久久久久久久 | 一区二区三区视频在线免费观看 | 免费的日批视频 | 亚洲日韩中文字幕一区 | 一区二区三区中文字幕 | 亚洲综合色视频在线观看 | 亚洲精品久久久久久一区二区 | 古装三级在线播放 | 黄色精品| av三级| 午夜视频在线播放 | 在线观看中文字幕视频 | 一级片在线观看 | 激情五月综合 | 中文字幕精品一区久久久久 | 午夜激情小视频 | 亚洲一区二区三区四区五区午夜 | 超碰在线播 | 久久最新 | 久久久久久久久久一区 | 欧美成人一区二区三区 | 亚洲国产精品va在线看黑人 | 国产精品永久免费 | 欲色av | 欧美精品一二三 | 激情五月婷婷综合 | 国产精品久久久久久久久大全 | 91久久精品视频 | 草草草久久久 | 久久99精品久久久久 | 成人免费一区二区三区视频网站 | 欧美色综合网 | 日本久草视频 | 亚洲一区二区三区视频在线 | 91资源在线播放 | 国产精品成av人在线视午夜片 | 国产精品久久久久久久久久久免费看 | 色综合天天综合网国产成人网 | 91精品久久久久久久久 | 久久久毛片|