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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)用定時(shí)器輸出PWM、紅外按鍵控制。按鍵按下燈就會(huì)抖動(dòng)?什么原因。怎么處理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:919834 發(fā)表于 2021-5-15 15:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如題。請(qǐng)問(wèn)一下各位大佬。只要按鍵按下,燈就會(huì)發(fā)生抖動(dòng)。定時(shí)器模擬PWM輸出設(shè)置頻率為200hz。燈在最亮?xí)r不抖動(dòng)。
有沒有解決方法?

單片機(jī)源程序如下:
  1. /*****************************************************
  2. * Timer1中斷服務(wù)函數(shù)
  3. *****************************************************/
  4. void Timer1_isr (void) interrupt 3  
  5. {
  6.     /* set Tim_Br1 as mode0 (13-bit) */
  7.     TL1 = 0x1d;       //初始值低字節(jié),TL0 的高 3 位是無(wú)效的
  8.     TH1 = 0xfd;         //初始值高字節(jié)(50us@16MHz)
  9.         // todo ...
  10.         Tim_B++;                                        //占空比設(shè)置80
  11.         Tim_R++;
  12.         Tim_G++;
  13.         count++;
  14.         //Diy_Cnt++;
  15.         cnt_Grad++;
  16.         if(Tim_B >= 80)                        //占空比80
  17.         {
  18.                 Tim_B = 0;
  19.         }
  20.         if(Tim_B < Bout)                //設(shè)置占空比值
  21.                 P35 = 1;
  22.         else
  23.                 P35 = 0;
  24.         if(Tim_G >= 80)                        //占空比80
  25.         {
  26.                 Tim_G = 0;
  27.         }
  28.         if(Tim_G < Gout)                //設(shè)置占空比值
  29.                 P11 = 1;
  30.         else
  31.                 P11 = 0;
  32.         if(Tim_R >= 80)                        //占空比80
  33.         {
  34.                 Tim_R = 0;
  35.         }
  36.         if(Tim_R < Rout)                //設(shè)置占空比值
  37.                 P10 = 1;
  38.         else
  39.                 P10 = 0;
  40.         
  41.         Timer0_Way = 1;
  42. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:921764 發(fā)表于 2021-5-15 16:05 | 只看該作者
按鍵有消抖嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:919834 發(fā)表于 2021-5-15 16:44 | 只看該作者

紅外遙控。我用定時(shí)7.9ms去過(guò)濾雜波了。而且紅外接收我用了外部中斷去接收。
  1. /*****************************************************
  2. * 外設(shè)中斷0服務(wù)函數(shù)
  3. *****************************************************/
  4. void Int_0(void) interrupt 0
  5. {
  6.         InFrared_Way = 1;

  7. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

地板
ID:921764 發(fā)表于 2021-5-15 16:57 | 只看該作者
zikanggong 發(fā)表于 2021-5-15 16:44
紅外遙控。我用定時(shí)7.9ms去過(guò)濾雜波了。而且紅外接收我用了外部中斷去接收。

抱歉,由于控制邏輯我不清楚,所以沒法給出具體建議。
但是我覺得既然是閃爍,那需要考慮的就是實(shí)際給燈的三個(gè)輸出的PWM是否符合你的設(shè)置了,可以拿示波器測(cè)試看看。
回復(fù)

使用道具 舉報(bào)

5#
ID:919834 發(fā)表于 2021-5-15 17:01 | 只看該作者
本帖最后由 zikanggong 于 2021-5-15 17:05 編輯
使弓弦 發(fā)表于 2021-5-15 16:57
抱歉,由于控制邏輯我不清楚,所以沒法給出具體建議。
但是我覺得既然是閃爍,那需要考慮的就是實(shí)際給燈 ...

我用示波器看過(guò)了。波形正常。但是按鍵一按會(huì)有低電平產(chǎn)生。肉眼能看得到。所以導(dǎo)致的一閃現(xiàn)象
這個(gè)紅外遙控器采用了nec協(xié)議。
回復(fù)

使用道具 舉報(bào)

6#
ID:919834 發(fā)表于 2021-5-16 16:55 來(lái)自手機(jī) | 只看該作者
有沒有大佬解惑
回復(fù)

使用道具 舉報(bào)

7#
ID:160500 發(fā)表于 2021-5-17 19:11 | 只看該作者
燈抖動(dòng)是怎么抖?是抖動(dòng)還是閃爍?
如果閃爍就是燈控制部分被打斷了,造成控制時(shí)間過(guò)長(zhǎng),也就是刷新率降低或者說(shuō)頻率太低造成
回復(fù)

使用道具 舉報(bào)

8#
ID:919834 發(fā)表于 2021-5-17 21:54 | 只看該作者
本帖最后由 zikanggong 于 2021-5-17 22:01 編輯
liuzx66 發(fā)表于 2021-5-17 19:11
燈抖動(dòng)是怎么抖?是抖動(dòng)還是閃爍?
如果閃爍就是燈控制部分被打斷了,造成控制時(shí)間過(guò)長(zhǎng),也就是刷新率降低 ...

按一下就滅一下才亮。
回復(fù)

使用道具 舉報(bào)

9#
ID:919834 發(fā)表于 2021-5-17 21:59 | 只看該作者
  1. //紅外接收
  2. void IRC_read(void)
  3. {
  4.         unsigned char t,i,j;  
  5.         WDTFLG = 0x5A;
  6.         //EINT0 = 0;                        //關(guān)閉中斷
  7.         t = 10;                     // 0.793ms延時(shí),運(yùn)行10次,處理無(wú)效紅外信號(hào),防止干擾
  8.     while(--t)  
  9.     {  
  10.         // 定時(shí)0.793*10ms 處理無(wú)效紅外信號(hào)
  11.         TH0 = 0xfb;
  12.         TL0 = 0xdf;
  13.         TR0 = 1;
  14.         while(!TF0);
  15.         TF0 = 0;
  16.         TR0 = 0;
  17.          
  18.         //P32變高電平,無(wú)效紅外信號(hào),跳出函數(shù)  
  19.         if(P32)  
  20.         {  
  21.             EINT0 = 1;            //中斷開啟
  22.             return ;  
  23.         }  
  24.     }  
  25.       
  26.     while(!P32);                           // 等待9ms低電平過(guò)去  
  27.    
  28.         //刷新最后2ms左右的低電平        處理長(zhǎng)按的
  29.     TH0 = 0xf3;                          //3072/FFFF-C00 (16m@hz)
  30.     TL0 = 0xff;                          //
  31.     TR0 = 1;  
  32.     while(!TF0);  
  33.     TF0 = 0;  
  34.     TR0 = 0;                    //延時(shí)2.305ms  即3072/FFFF-C00 (16m@hz)
  35.       
  36.     //處理長(zhǎng)按
  37.     if(!P32)  
  38.     {         
  39.                 EINT0=1;                        //中斷0打開       
  40.                 return;  
  41.     }

  42.     //等待4.5ms高電平的過(guò)去  
  43.     while(P32);     
  44.    
  45.     //開始接收用戶碼  
  46.     for(i=0; i<4; i++)  
  47.     {  
  48.         for(j=0; j<8; j++)  
  49.         {  
  50.             while(!P32);                   //等待低電平過(guò)去 低電平相同不用計(jì)時(shí)
  51.             Data[i] >>= 1;             //把上次的數(shù)據(jù)位右移一位  
  52.                        
  53.                        
  54.         //延時(shí)0.793ms (>0.56ms)
  55.             TH0 = 0xfb;  
  56.             TL0 = 0xdf;
  57.             TR0 = 1;  
  58.             while(!TF0);  
  59.             TR0=0;  
  60.             TF0=0;              
  61.               
  62.             // 若為數(shù)據(jù)"1",則延時(shí)后P32為高電平  
  63.             if(P32)   
  64.             {  
  65.                 Data[i] |= 0x80;    // 所有數(shù)據(jù)位1放最高位  
  66.                 while(P32);                    // 等待高電平過(guò)去  
  67.             }  
  68.         }
  69.         }               
  70.     return;
  71. }


  72. 這是搬大佬的紅外接收代碼使用
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

10#
ID:919834 發(fā)表于 2021-5-17 22:00 | 只看該作者

謝謝大佬鼎力相助
回復(fù)

使用道具 舉報(bào)

11#
ID:919834 發(fā)表于 2021-5-17 22:04 | 只看該作者
liuzx66 發(fā)表于 2021-5-17 19:11
燈抖動(dòng)是怎么抖?是抖動(dòng)還是閃爍?
如果閃爍就是燈控制部分被打斷了,造成控制時(shí)間過(guò)長(zhǎng),也就是刷新率降低 ...

刷新率指的是程序在某段運(yùn)行時(shí)間有點(diǎn)長(zhǎng)導(dǎo)致刷新率低嗎
回復(fù)

使用道具 舉報(bào)

12#
ID:919834 發(fā)表于 2021-5-18 19:35 | 只看該作者
重寫一遍,每個(gè)功能嘗試,已查出原因:我在寫時(shí)操作了e2prom,單片機(jī)就停止了。導(dǎo)致定時(shí)器模擬PWM停止,要么rgb處于高電平要么低電平。希望各位如我一樣的新手。好好讀讀廠商提供的手冊(cè)和最好能找對(duì)應(yīng)的技術(shù)支持
回復(fù)

使用道具 舉報(bào)

13#
ID:956872 發(fā)表于 2021-9-4 18:23 | 只看該作者
zikanggong 發(fā)表于 2021-5-18 19:35
重寫一遍,每個(gè)功能嘗試,已查出原因:我在寫時(shí)操作了e2prom,單片機(jī)就停止了。導(dǎo)致定時(shí)器模擬PWM停止,要 ...

你的EEPROM存儲(chǔ)是不是跟PWM的定時(shí)器用的同一個(gè)定時(shí)中斷
回復(fù)

使用道具 舉報(bào)

14#
ID:624769 發(fā)表于 2021-9-4 21:28 | 只看該作者
PEB188 發(fā)表于 2021-9-4 18:23
你的EEPROM存儲(chǔ)是不是跟PWM的定時(shí)器用的同一個(gè)定時(shí)中斷

Eeprom 操作時(shí),發(fā)送完 TRIG 指令之后,新的STC系列 單片機(jī)會(huì)停止一切其他工作,直到Eeprom 操作完成為止,此時(shí)就算有中斷產(chǎn)生,只作標(biāo)志不會(huì)觸發(fā)。所以之前你的程序不停的擦除Eeprom(需要耗時(shí)21ms) 我才說(shuō)不合理。但是你說(shuō)無(wú)所謂我也就不多說(shuō)了。
回復(fù)

使用道具 舉報(bào)

15#
ID:491577 發(fā)表于 2021-9-5 13:22 | 只看該作者
為什么用定時(shí)器模擬PWM,用STC單片機(jī)PWM模塊不好嗎?PWM模塊是獨(dú)立的,運(yùn)行時(shí)是不受cpu影響到,擦除Eeprom(需要耗時(shí)21ms)也不會(huì)影響。
回復(fù)

使用道具 舉報(bào)

16#
ID:964308 發(fā)表于 2021-9-7 11:24 來(lái)自手機(jī) | 只看該作者
按鍵按下不是有聲音嗎,其實(shí)那段聲音就是按鍵不完全接觸導(dǎo)致的,內(nèi)部再通斷交替,時(shí)間大約20ms。消抖的話要么定義一個(gè)30ms延時(shí)函數(shù),要么做按鍵的電路
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品a级| 国产夜恋视频在线观看 | 99精品视频在线观看免费播放 | 精品www| 国产一区二区三区免费 | 鲁一鲁资源影视 | jizz亚洲人 | 久久久久久亚洲精品 | 国产亚洲www| 日韩av啪啪网站大全免费观看 | 综合久久综合久久 | 日韩欧美在线观看 | 久久之精品 | 久久精品久久久 | 欧美一区二区三区高清视频 | 奇米影视77 | 中文字幕中文字幕 | 天天夜夜人人 | 国产美女精品视频 | 亚洲午夜精品一区二区三区 | 久草网址 | 国产高清在线精品一区二区三区 | 久久久久久久久99精品 | 伊人网99 | 国产精品日韩一区二区 | 精品国产伦一区二区三区观看体验 | 国产操操操 | 国内精品久久影院 | 欧美日韩国产在线观看 | 综合久久一区 | 蜜桃视频在线观看免费视频网站www | 国产精品日韩欧美一区二区 | 国内精品久久久久久久 | 玖玖在线免费视频 | 99久久国产综合精品麻豆 | 国产精品成人69xxx免费视频 | 日韩国产精品一区二区三区 | 久久综合狠狠综合久久综合88 | 九九在线精品视频 | 91精品国产高清一区二区三区 | 中文字幕第十一页 |