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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機用定時器輸出PWM、紅外按鍵控制。按鍵按下燈就會抖動?什么原因。怎么處理

[復制鏈接]
跳轉到指定樓層
樓主
ID:919834 發表于 2021-5-15 15:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題。請問一下各位大佬。只要按鍵按下,燈就會發生抖動。定時器模擬PWM輸出設置頻率為200hz。燈在最亮時不抖動。
有沒有解決方法?

單片機源程序如下:
  1. /*****************************************************
  2. * Timer1中斷服務函數
  3. *****************************************************/
  4. void Timer1_isr (void) interrupt 3  
  5. {
  6.     /* set Tim_Br1 as mode0 (13-bit) */
  7.     TL1 = 0x1d;       //初始值低字節,TL0 的高 3 位是無效的
  8.     TH1 = 0xfd;         //初始值高字節(50us@16MHz)
  9.         // todo ...
  10.         Tim_B++;                                        //占空比設置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)                //設置占空比值
  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)                //設置占空比值
  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)                //設置占空比值
  37.                 P10 = 1;
  38.         else
  39.                 P10 = 0;
  40.         
  41.         Timer0_Way = 1;
  42. }
復制代碼


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

使用道具 舉報

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

使用道具 舉報

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

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

  7. }
復制代碼

回復

使用道具 舉報

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

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

使用道具 舉報

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

我用示波器看過了。波形正常。但是按鍵一按會有低電平產生。肉眼能看得到。所以導致的一閃現象
這個紅外遙控器采用了nec協議。
回復

使用道具 舉報

6#
ID:919834 發表于 2021-5-16 16:55 來自手機 | 只看該作者
有沒有大佬解惑
回復

使用道具 舉報

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

使用道具 舉報

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

按一下就滅一下才亮。
回復

使用道具 舉報

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

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


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

使用道具 舉報

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

謝謝大佬鼎力相助
回復

使用道具 舉報

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

刷新率指的是程序在某段運行時間有點長導致刷新率低嗎
回復

使用道具 舉報

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

使用道具 舉報

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

你的EEPROM存儲是不是跟PWM的定時器用的同一個定時中斷
回復

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日日干日日射 | 四虎永久免费黄色影片 | 一级黄色片免费在线观看 | 国产乱码精品一区二区三区忘忧草 | 日韩在线免费 | 无码一区二区三区视频 | 激情在线视频 | 精品一区二区三区四区五区 | 免费黄色录像视频 | 久久久成人动漫 | 国产欧美日韩精品一区 | 一区二区三区欧美 | 欧美日韩综合一区 | 国产日韩精品一区 | 日韩一区二区三区在线视频 | 久久国产一区二区三区 | 欧美精品久久 | 日日夜夜精品视频 | 福利片一区二区 | 香蕉一区 | 一区二区伦理电影 | 国产精品久久久久久福利一牛影视 | 91精品国产91久久综合桃花 | 日韩中文字幕一区二区 | 欧美高清视频一区 | 日本在线播放一区二区 | av一级久久 | 久久美国 | 久久久久国产一区二区三区 | 99精品视频一区二区三区 | 日本精品免费 | 日韩成人av在线播放 | 久久久久久成人 | 国产成人短视频在线观看 | 中文字幕精 | 国产成人a亚洲精品 | 国产成人在线视频 | 精品国产一区二区在线 | 欧美精品一区二区三区四区 在线 | 欧美 日韩 亚洲91麻豆精品 | 中文字幕av在线 |