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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STM32的DMX512通信控制RGB燈帶程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:326235 發表于 2021-1-18 17:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
30黑幣
程序是讓燈帶只亮紅色并呼吸效果,當cnr增加到0x80時,會出現全部燈熄滅的情況,測出來波形是32us長低電平+12us高電平導致的初始化(個人猜測),如何避免該數據造成的初始化,希望有人解答一下

int main(void)
{
        u8 key;
        u8 i=0,t=0,u = 0;
        u8 cnr = 0x00;
        u8 cnb = 0x00;
        u8 cng = 0x00;
        u8 rs485buf[35];
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);  
        uart_init(115200);      
        
        LED_Init();   
         LCD_Init();
        KEY_Init();
        RS485_Init(250000);
        Dat_Rst_Init();
         delay_ms(100);
        LED0 = 1;
        
        DatRst = 0;     
        delay_us(88);
        DatRst = 1;
        delay_us(8);
        DatRst = 0;
        delay_us(32);
        DatRst = 1;
        delay_us(8);
        for( i = 0; i < 30; i++ )
        {
                rs485buf[ i] = 0x00;
        }
        RS485_Send_Data(rs485buf,30);
        
        while(1)
        {
                DatRst = 0;
                delay_us(88);
                DatRst = 1;
                delay_us(8);
                DatRst = 0;
                delay_us(32);
                DatRst = 1;
                delay_us(8);
                for( i = 0; i < 30; i = i+3 )
                {
                        rs485buf[i ] = cnr;
                        rs485buf[i+1] = cnb;
                        rs485buf[i+2] = cng;
                }
                RS485_Send_Data(rs485buf,30);
                delay_ms(10);
                switch(u)
                {
                        case 0:
                                cnr = cnr + 0x01;
                        if(cnr == 0xFF)
                                {
                                        cnr = 0xFF;
                                        u = 1;
                                }
                                break;
                        case 1:
                                cnr = cnr - 0x01;
                        if(cnr == 0x00)
                        {
                                cnr = 0x00;
                                u = 0;
                        }
                        break;
                        default:
                                u = 0;
                        break;
                }
        }   
}

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

使用道具 舉報

沙發
ID:390416 發表于 2021-1-19 01:04 | 只看該作者
以下代碼是DMX512發送代碼,使用STC8F單片機。出自《人人學會單片機》
  1. bit DMX512_RB8_ok=0;                                             //保存串口的第八位數據
  2. bit Uart2_Flag=1;                                                        //發送控制標志位

  3. u8 xdata DMX512_Write_Buffer[Pixel_Num];
  4. #define BREAK 8                                                                //這個是控制BREAK的低電平復位時間的
  5. #define MAB BREAK+2                                                        //這個是控制復位后MAB時間的
  6. #define MAREK BREAK+4                                                //這個是控制復位后MAB時間的
  7. #define DMX512_OUT P11
  8. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  9. // 定時器4、定時器2、串口2初始化配置 波特率250000bps可變,9位數據,下載主頻設置為24MHz
  10. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  11. void DMX512_Init()
  12. {
  13.         T4T3M |= 0x20;                                                        //定時器T4工作在1T模式
  14.         T4L = 0xF0;                                                                //初值,定時22us
  15.         T4H = 0xFD;                                                                //初值,定時22us
  16.         T4T3M |= 0x80;                                                        //定時器開始計時
  17.         IE2|=0X40;                                                                //定時器4中斷允許
  18.         
  19.         S2CON = 0x88;                                                        //9位數據,可變波特率
  20.         AUXR |= 0x04;                                                        //定時器2時鐘為晶振時鐘
  21.         T2L = 0xE8;                                                                //定時器初值,定時時間*4=波特率
  22.         T2H = 0xFF;                                                                //定時器初值,定時時間*4=波特率
  23.         AUXR |= 0x10;                                                        //啟動定時2
  24.         IE2|=0X01;                                                                //定時器2中斷允許
  25.         //IP2H|=0X01;                                                        //串口中斷改成最高優先級
  26.         //IP2|=0X01;                                                        //串口中斷改成最高優先級
  27.         EA=1;                                                                        //總中斷打開
  28.         DMX512_Write_Buffer[0]=0;                                //DMX512規范,第0字節發送的是0;
  29. }
  30. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  31. // DMX512發送函數
  32. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  33. void DMX512_TX_timer0() interrupt 20
  34. {
  35.         static u16 i;
  36.         static u16 count=0;
  37.         if(count<BREAK)                                                        //BREAK 復位拉低(根據項目調整參數)
  38.         {
  39.                 count++;
  40.                 DMX512_OUT=0;
  41.         }
  42.         else if(count<MAB)                                                //復位后拉高最少12us(根據項目調整參數)
  43.         {
  44.                 DMX512_OUT=1;
  45.                 count++;
  46.         }
  47.         if(count==MAB)                                                        //開始傳輸數據
  48.         {
  49.                 if(Uart2_Flag)                                                //上一個字節發送完成,中斷置1后。
  50.                 {        
  51.                         S2CON|=0x08;                                        //DMX512的字節是9位數據,有兩個停止位,第8bit是TB8中。
  52.                         S2BUF=DMX512_Write_Buffer[i];        //發送字節
  53.                         Uart2_Flag=0;                                        //未發送完,不允許再進來                                
  54.                         i++;                                                        //下一個字節
  55.                         if(i>=Pixel_Num)                                //大于總字節數量
  56.                         {
  57.                                 i=0;
  58.                                 count++;
  59.                         }
  60.                                                                                         //延時,使兩位停止位+空閑總共達到12us
  61.                 }
  62.         }
  63.         if(count>MAB)                                                        //字節發送完之后,其余時間空閑,本程序是0~24字節,后面空閑
  64.         {
  65.                 DMX512_OUT=1;
  66.                 count++;
  67.                 if(count>100)                                                //100  用于控制幀率,DMX512標準是 最多44幀數據包
  68.                 {
  69.                         count=0;
  70.                 }
  71.         }
  72. }

  73. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  74. // 串口中斷
  75. //********************************************************************* [url=http://wqxdz.taobao.com]http://wqxdz.taobao.com[/url] ---祁緒電子---2020年5月 *************
  76. void Uart2_Routine (void) interrupt 8
  77. {        
  78.         S2CON&=0xed;                                                        //清除發送中斷標志
  79.         Uart2_Flag=1;                                                        //標志位允許下一個字節發送
  80. }
復制代碼
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-1-19 10:12 | 只看該作者
這個協議沒用過,不懂,只能幫你頂一下。
回復

使用道具 舉報

地板
ID:373388 發表于 2021-1-19 10:19 | 只看該作者
你描述的不是很清楚,你這個應該是主控端指令系統,終端控制執行部分,硬件是什么樣子的,根據你的指令協議怎么工作的,都沒有講,怎么幫你分析啊

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:326235 發表于 2021-1-25 14:43 | 只看該作者
xhaity 發表于 2021-1-19 10:19
你描述的不是很清楚,你這個應該是主控端指令系統,終端控制執行部分,硬件是什么樣子的,根據你的指令協議 ...

用STM32開發板的485接口發送DMX512通用協議寫呼吸燈效果,解碼芯片為TM512AC,我測試了波形之后,發現從0x00到0x7F的亮度變化和0x80到0xFF的亮度變化一樣,測試得出解碼輸出的PWM波低電平占空比到0x7F就滿了,然后從0x80PWM波低電平占空比又從0開始到0xFF滿,說明這個解碼芯片輸出PWM波最大值是127,而不是正常的255,因為正常的DMX512通信協議是到255才是最亮的,所以問一下你們有沒有碰到這種情況,對這個TM512AC了解嗎。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:326235 發表于 2021-1-25 14:52 | 只看該作者
我解釋一下硬件和后續,硬件采用的是TM512AC解碼芯片的燈帶,自帶解碼和輸出PWM功能,但是DMX512通用協議對于燈光的控制一般是從0到255燈光從最暗到最亮,所以我寫的時候cnr就是一直+1,當加到0x80的時候,燈就滅掉了,然后又慢慢亮,效果就是呼吸亮兩次,呼吸滅兩次。
后續我測試之后,發現這個解碼芯片的PWM輸出低電平占空比(就是燈亮的電平占空比)從0x00的0%到0x7F的100%,然后到0x80又變成了0%,到0xFF的100%,那么說明它的控制輸出,從0到127就可以了,但是我是第一次用這個協議做,對于這款解碼芯片也不是很了解,就是問一下這樣合理嗎,你們有沒有碰到這種情況。
結論就是我帖子里的猜想是錯誤的,DMX512通信里的數據幀并不會觸發初始化,但是上述的情況大家是否碰到過可以探究探究。也是給以后可能用到的人一個提醒吧。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:373388 發表于 2021-2-7 10:16 | 只看該作者
具體的你看看數據手冊吧 說明TM512AC這個芯片就是7bit pwm占空比, 最高位有可能其他含義;說明128當作 0處理了,正好符合 測試現象;  你就把數據范圍控制在0-127,如果能滿足你的控制要求就行了,要不滿足控制要求,就選擇其他芯片了
回復

使用道具 舉報

8#
ID:326235 發表于 2021-2-27 17:11 | 只看該作者
xhaity 發表于 2021-2-7 10:16
具體的你看看數據手冊吧 說明TM512AC這個芯片就是7bit pwm占空比, 最高位有可能其他含義;說明128當作 0處 ...

好的,謝謝
回復

使用道具 舉報

9#
ID:634016 發表于 2022-1-11 16:14 | 只看該作者
這頭像也太萌了吧
回復

使用道具 舉報

10#
ID:77589 發表于 2023-8-2 17:43 | 只看該作者
頂一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线āv视频 | 国产日韩一区二区三区 | 成年女人免费v片 | 伊人久久国产 | www.国产精| 中文字幕亚洲一区 | 久久伊 | 欧美日韩精品区 | 在线毛片网| 日韩视频福利 | 三级欧美 | 91精品国产色综合久久 | 日韩在线观看精品 | 天天色天天色 | 国产欧美在线观看 | 免费黄色片在线观看 | 国产精品久久久久久久免费观看 | 午夜久久| 亚洲成人一区 | 欧美精品99| 99精品久久久久久中文字幕 | 密室大逃脱第六季大神版在线观看 | a级毛片毛片免费观看久潮喷 | 久久国产成人 | 天天碰夜夜操 | 四虎在线观看 | www国产亚洲精品久久网站 | 午夜在线视频 | 日本三级日产三级国产三级 | 欧美在线视频观看 | 欧美一区二区三区在线看 | 亚洲欧美一区二区三区1000 | 欧美一级观看 | 成人综合一区 | 久久久久久久综合色一本 | 国产高清一区二区 | 九九九国产 | 99久久夜色精品国产亚洲96 | 亚洲最新在线 | 国产一区 | 成人av免费 |