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

標題: STC15W408單片機頻率計能做到多高頻率? [打印本頁]

作者: 新鄉家電維修    時間: 2021-12-22 09:08
標題: STC15W408單片機頻率計能做到多高頻率?
自己搞維修,經常用到測頻率的,也是多年想制作的,這次有時間了,
想用STC15W408AS單片機制作頻率計,用外接基頻和與非門,單片機只做計數器用
用內部35M頻率(不用產生基頻,不用擔心頻率不穩),且不分頻,盡量提高計數分辨率,
頻率計能做到多高呢?



作者: xuyaqi    時間: 2021-12-22 09:58
如果是學習值得自己制作,搞維修還是買一個劃算。
作者: Y_G_G    時間: 2021-12-22 10:09
不管是什么維修,搞臺二手的示波器,比頻率計實用很多
作者: 188610329    時間: 2021-12-22 11:35
我很疑惑,你不用定時,只計數,如何得出頻率??

有現成的CCP不用,非要用外部中斷, 那這計頻能力不見得比89C52來得高。
作者: Hephaestus    時間: 2021-12-22 12:05
頻率不夠可以外掛預分頻器。
作者: npn    時間: 2021-12-22 14:16
用FPGA可以測幾百Mhz沒有問題
作者: Y_G_G    時間: 2021-12-22 15:23
npn 發表于 2021-12-22 14:16
用FPGA可以測幾百Mhz沒有問題

FPGA在速度上確實要強大很多,關鍵是:FPGA有多少人會呢?樓主會不會呢?在論壇的這個板塊,大多是新手,關于用FPGA來進行設計的建議,基本等于白說
作者: angmall    時間: 2021-12-22 19:25
你用16位的計時器,頻率計能做到最高可測頻率 65,535Hz


作者: wulin    時間: 2021-12-22 20:55
給你提供一個思路,理論上能達10M以上,電路能夠仿真成功,未經實物驗證。


  1. //適用于STC15W408AS-20PIN系列
  2. #include <STC15F2K60S2.H>

  3. unsigned char code dispcode[]={//共陽數碼管段碼"0~f"
  4.                 0xc0,0xf9,0xa4,0xb0,
  5.                 0x99,0x92,0x82,0xf8,
  6.                 0x80,0x90,0x88,0x83,
  7.                 0xc6,0xa1,0x86,0x8e};
  8. unsigned char data temp[6];     //顯示緩存
  9. unsigned char T0count;     //T0的計數器值
  10. bit flag,sign;             //標志位
  11. unsigned long num;         //頻率值
  12. //初始化定時器0
  13. void Timer0Init()        //@24.000MHz
  14. {
  15.         TMOD= 0x05;                //設置外部計數模式
  16.         TL0 = 0x00;                //設置定時初始值
  17.         TH0 = 0x00;                //設置定時初始值
  18.         TF0 = 0;                //清除TF0標志
  19.         TR0 = 1;                //定時器0開始計時
  20.         EA  = 1;                //開總中斷
  21.         ET0 = 1;                //開T0中斷
  22. }
  23. //初始化定時器2,沒有定時器1
  24. void Timer2Init()        //2毫秒@24.000MHz
  25. {
  26.         AUXR |= 0x04;        //定時器時鐘1T模式
  27.         T2L = 0x80;                //設置定時初始值
  28.         T2H = 0x44;                //設置定時初始值
  29.         AUXR |= 0x10;        //定時器2開始計時
  30.         IE2 |=0x04;    //開T2中斷
  31. }
  32. //主函數
  33. void main(void)
  34. {  
  35.         unsigned char i;
  36.         P1M1 = 0x00;                                         //設置P1準雙向
  37.         P1M0 = 0x00;                                         //設置P1準雙向
  38.         P3M1 = 0x00;                                         //設置P3.4準雙向 其余IO口推挽
  39.         P3M0 = 0x10;                                         //設置P3.4準雙向 其余IO口推挽
  40.         P5M1 = 0x00;                                         //設置P5準雙向
  41.         P5M0 = 0x00;                                         //設置P5準雙向
  42.         Timer0Init();
  43.         Timer2Init();
  44.         sign=1;
  45.         while(1)
  46.         {
  47.                 if(flag==1)
  48.                 {
  49.                         flag=0;
  50.                         num=((unsigned long)T0count<<16)|(TH0<<8|TL0);
  51.                         for(i=6;i>0;i--)
  52.                         {
  53.                                 temp[i-1]=num%10;//由低位到高位保存
  54.                                 num/=10;
  55.                         }
  56.                         TH0=0x00;
  57.                         TL0=0x00;
  58.                         T0count=0;
  59.                         TR0=1;        //定時器0開始計數
  60.                         sign=1;        //定時器2開始計時
  61.                 }
  62.         }
  63. }
  64. //定時器T0中斷服務子函數
  65. void t0(void) interrupt 1
  66. {
  67.         T0count++;
  68. }
  69. //定時器T2中斷服務子函數  
  70. void t2(void) interrupt 12
  71. {
  72.         static unsigned char i;   //顯示計數器值
  73.         static unsigned int count;   //計時計數器值
  74.         TL1 = 0x60;                //設置定時初始值
  75.         TH1 = 0xF0;                //設置定時初始值
  76.         if(sign)
  77.         {
  78.                 if(++count>=500)             //秒定時
  79.                 {
  80.                         TR0=0;
  81.                         count=0;
  82.                         sign=0;                                                       
  83.                         flag=1;
  84.                 }
  85.         }
  86.         P3&=0x10;                              //消隱
  87.         if(i==2)P1=dispcode[temp[i]]&0x7f;//加小數點表示KHz
  88.         else P1=P1=dispcode[temp[i]];                 //段碼
  89.         switch(i)                                                            //位碼
  90.         {
  91.                 case 0: P3|=0x01; break;
  92.                 case 1: P3|=0x02; break;
  93.                 case 2: P3|=0x04; break;
  94.                 case 3: P3|=0x08; break;
  95.                 case 4: P3|=0x20; break;
  96.                 case 5: P3|=0x40; break;
  97.         }               
  98.         i=++i%6;
  99. }
復制代碼







作者: 小貓電子    時間: 2021-12-22 22:31
用普通的89C52RC,晶振11.0592,做過能測出15M左右的頻率
作者: 新鄉家電維修    時間: 2021-12-23 12:36
188610329 發表于 2021-12-22 11:35
我很疑惑,你不用定時,只計數,如何得出頻率??

有現成的CCP不用,非要用外部中斷, 那這計頻能力不見 ...

我準備用恒溫晶振10M,分頻到0.5HZ,比單片機定時器準確很高。用35M主頻,理論分辨率能做到17M,
又需要用多時間閘門,比如1HZ閘門,100ms閘門,10ms閘門,前級準備用MB506,測到2.4G頻率
作者: 新鄉家電維修    時間: 2021-12-23 12:37
Y_G_G 發表于 2021-12-22 10:09
不管是什么維修,搞臺二手的示波器,比頻率計實用很多

準備前級用BM506做到2.4G頻率一下測量
作者: 新鄉家電維修    時間: 2021-12-23 12:39
angmall 發表于 2021-12-22 19:25
你用16位的計時器,頻率計能做到最高可測頻率 65,535Hz

溢出進位啊,溢出一次加1,可以做到3字節,理論256*256*256
作者: 冰火風輪    時間: 2021-12-23 17:57
STC15 IO速度 12.幾,STC8 系列強推拉模式 28 左右,要不要留點余量
作者: Y_G_G    時間: 2021-12-23 18:23
新鄉家電維修 發表于 2021-12-23 12:37
準備前級用BM506做到2.4G頻率一下測量

好像感覺還不錯的樣子,但好像有點不對
你做好一個頻率計.那不是得找個儀器來校正,如果有校正的儀器,我要頻率計干嘛
如果做好不校正,你怎么知道準不準
我也做過幾年的產線編修,示波器就用得多,頻率計基本用不到
作者: a70524414    時間: 2021-12-24 13:59
找個示波器看一看
作者: 新鄉家電維修    時間: 2022-2-10 17:57
188610329 發表于 2021-12-22 11:35
我很疑惑,你不用定時,只計數,如何得出頻率??

有現成的CCP不用,非要用外部中斷, 那這計頻能力不見 ...

0.5HZ基準
作者: rundstedt    時間: 2022-2-10 23:43
這個問題的答案取決于預分頻器最高工作頻率。
作者: xjx51    時間: 2022-7-25 00:40
我做過一個袖珍的頻率計,只有巴掌大,因此功能也很少,我是直接用單片機連接倍頻分頻電路的,完事后面在用定時器幾時。只能測100khz左右,精確度還不高,后來就丟在角落吃灰了。

作者: wufa1986    時間: 2022-7-25 08:26
使用定時器門控測量?梢赃_到非常高的頻率
作者: Hephaestus    時間: 2022-7-25 19:54
npn 發表于 2021-12-22 14:16
用FPGA可以測幾百Mhz沒有問題

最高能測到多高的頻率不需要FPGA來解決。某一個寶上面一百出頭的8位計數值頻率計就是用普通單片機,加個MB506預分頻器輕松做到2.4GHz最大頻率。

頻率計中,用FPGA做主控,比單片機優秀之處在于解決門控時間和分辨率的矛盾關系。比如單片機要100s門控時間填滿8位數字,用FPGA可能1s就能完成。單純的用FPGA,想做到單片機頻率計2.4GHz的最高頻率那是絕對不可能的。

你還是了解一下頻率計的原理,或者自己思考下做頻率計需要用什么方法來解決,再來發言為好。
作者: cnos    時間: 2022-7-26 09:18
小貓電子 發表于 2021-12-22 22:31
用普通的89C52RC,晶振11.0592,做過能測出15M左右的頻率

僅靠單片機本身能做到?
作者: imxuheng    時間: 2022-7-26 16:18
單靠單片機自身的話最高測到幾百K吧,12M晶振,12T模式還要12分頻,那實際頻率為1M,處理一條語句要一個機器周期,所以1M的頻率還要縮水。即便是1T模式貌似也不會提高多少
作者: gang180    時間: 2022-8-25 08:37
用分頻可以20m
作者: hhh402    時間: 2022-8-25 09:59
35M/4=8.75M以下精度還是有保證的,8.75——17M就算能夠測量誤差也很大,2.4G就不要想了,直接購買成品比較好。
作者: coody_sz    時間: 2022-8-25 16:26
STC15W408單片機頻率計,最高計數為主頻的一半,比如我常用32.768MHz做主頻,則最高計數頻率為16MHz。
作者: fsj5098    時間: 2022-9-16 23:09
FPGA在速度上確實要強大很多,關鍵是:FPGA有多少人會呢?樓主會不會呢?在論壇的這個板塊,大多是新手,關于用FPGA來進行設計的建議,基本等于白說,我用89C52加8154無需分頻就做到可以測量100MHz的頻率,還是等精度測量http://www.zg4o1577.cn/bbs/dpj-181928-1.html
作者: coody_sz    時間: 2022-9-17 21:07
STC15W408AS用定時器0能測量的頻率是主頻的一半,我的方法是用一個精確的1秒高電平來做門控,10ms低電平來處理,則可以測量很高精度的頻率,比如我用32MHz做主頻,直接測頻最高16MHz,可以用過NB506分頻則可以測2.4GHz。秒信號使用恒溫晶振和GPS校準(馴服時鐘)。
作者: fsj5098    時間: 2022-9-17 22:34
業余條件我是用GPS秒信號來校準頻率計




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产男女猛烈无遮掩视频免费网站 | 国产精品成人69xxx免费视频 | 亚洲激情网站 | 在线免费观看a级片 | 一区二区视频 | 亚洲国产视频一区二区 | 亚洲欧美综合精品另类天天更新 | av网站在线播放 | 精品一区二区三区在线观看国产 | 一本大道久久a久久精二百 欧洲一区二区三区 | 天天天久久久 | 古装三级在线播放 | 欧美一级黄视频 | a级片在线观看 | 国产精品久久久久久久久久免费看 | 久久综合一区二区 | 中文字幕在线视频精品 | 久久久99国产精品免费 | jvid精品资源在线观看 | 一区二区欧美在线 | 欧美一区二区三区免费电影 | 国产95在线 | 亚洲一区二区三区国产 | 男女羞羞视频免费 | 国产午夜精品视频 | 国产超碰人人爽人人做人人爱 | 日本午夜精品 | 中文字幕 在线观看 | 国产精品久久久久久亚洲调教 | 91玖玖| av在线免费观看网站 | 一级a爱片性色毛片免费 | 免费人成在线观看网站 | 久久精品亚洲 | 国产精品久久久久久久久久久久久久 | 久久免费精品 | 日日噜噜夜夜爽爽狠狠 | 精品国产免费一区二区三区五区 | 日韩精品一区二 | 天天天天操 | 欧美不卡一区二区三区 |