矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: ygnlhxyzj

自制10hz到2.4G频率计

  [复制链接]
     
 楼主| 发表于 2017-10-22 20:14:26 | 显示全部楼层
再发一些测试图片,信号发生器是22.1184M晶振分频得到

610HZ

610HZ

1016HZ

1016HZ

10907HZ

10907HZ

100538HZ

100538HZ

201076HZ

201076HZ

614400HZ

614400HZ

1005381HZ

1005381HZ

2211840HZ

2211840HZ

5529600HZ

5529600HZ

11059200HZ

11059200HZ
回复 支持 反对

使用道具 举报

     
发表于 2017-10-23 09:24:04 | 显示全部楼层
楼主辛苦了!又给我们带来惊喜!想问问你现在修改了程序,低频改为测周期法,是否要增加拨动开关来转换?还有我现在用的是PO口接显示屏,和最新版本的程序不符,我把头文件修改为:#include "AT89X52.h"
#define LCM_Data  P0
#define Busy    0x80 //用于检测LCM状态字中的Busy标识
//22.1184M
sbit RS=P2^7;
sbit RW=P2^6;
sbit EN=P2^5;


是否可以?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2017-10-23 10:30:21 | 显示全部楼层
cuijl1881840 发表于 2017-10-23 09:24
楼主辛苦了!又给我们带来惊喜!想问问你现在修改了程序,低频改为测周期法,是否要增加拨动开关来转换?还 ...

不需要开关,程序先使用频率法测量,如果结果是200hz以下的频率,再次使用周期法测量提高低频测量精度。这次对频率测量法也做了修改,计算显示过程没有放在主程序中,而是放在计数器0的初始化程序中,你需要修改主程序main,计数器0的初始化程序InitTimer0,计数器0的中断响应程序Timer0Interrupt,把这几个程序代换你的原来程序的相应部分,显示部分没有修改,应该还能正确显示。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-23 11:49:11 | 显示全部楼层
因为我现在用的是MZVV版主修改过程序那个版本,把显示的接口改为P0口了,如果要改回P2口的话就要增加很多条飞线,比较麻烦,我不想去改动硬件了。我的意思是保留楼主最新版本的主程序,只是把P2口的定义改为P0.
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2017-10-23 12:44:11 | 显示全部楼层
cuijl1881840 发表于 2017-10-23 11:49
因为我现在用的是MZVV版主修改过程序那个版本,把显示的接口改为P0口了,如果要改回P2口的话就要增加很多条 ...

修改部分没有涉及p0口p2口部分,没有涉及显示部分,你使用p0口显示应该没有问题。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-23 13:38:42 | 显示全部楼层
好的,我试试,谢谢楼主!
回复 支持 反对

使用道具 举报

     
发表于 2017-10-23 22:14:37 | 显示全部楼层
ygnlhxyzj 发表于 2017-10-23 12:44
修改部分没有涉及p0口p2口部分,没有涉及显示部分,你使用p0口显示应该没有问题。

把显示屏接口改成P0后,可以正常显示,但是测量值偏低了点,请问怎样调呢?我试调了一下weee值,但是调不高,void InitTimer0(void)//Timer0定时器10毫秒
{  
  
   P1_2=0;//停止计数
weee=100;
while(weee)
        {
    weee--;
        }
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2017-10-24 05:35:45 | 显示全部楼层
cuijl1881840 发表于 2017-10-23 22:14
把显示屏接口改成P0后,可以正常显示,但是测量值偏低了点,请问怎样调呢?我试调了一下weee值,但是调不 ...

200hz以下调这里:} //这里jishi是一个周期的计数


P1_2=0;//停止计数


kk= 520400000/jishi;

}
//----------------------------------调520400000的值,
200hz以上调这里


TH0 = 0x6e;
TL0 = 0xa4; //11.059200显示11.059208
// TH0 = 0x6c;
// TL0 = 0x88; //25000006
// TH0 = 0x6c;
// TL0 = 0x89; //24999994
pph=1;调TH0 = 0x6e;
TL0 = 0xa4; 的值。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-25 22:29:22 | 显示全部楼层
ygnlhxyzj 发表于 2017-10-24 05:35
200hz以下调这里:} //这里jishi是一个周期的计数

今天又调了下程序,200HZ以下的频率调了原值为520400000的数据,调为520900000后,测量200HZ以下的信号和台式频率计对比都算准确了。但是200HZ以上的频率,反复调整TH0和TL0,结果还不尽如人意,把TH0改为0x6d,  TL0为0xad时,以一个7.3728MHZ的精准方波时钟信号为标准,实测值为7.372792,还差几HZ就逼近实际值了,但是此数值已经是临界状态,结果有时会在7.372和7.368之间跳动;测量3.6864MHZ时钟为3.686395,也是差几HZ,再把TL0往下调到0xaa结果就会低4KHZ了,但如果把TH0调高的话,KHZ位又会变化太大,反复试验把TH0定为0x6d,再去微调TL0。
        在此想问问楼主还有什么办法可以提高精度吗?还有就是现在这个版本有时会出现显示乱码现象,重新上电又会恢复正常,编译的时候出了6个警告,粗看好像都是关于LCM的。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-26 00:36:36 来自手机 | 显示全部楼层
cuijl1881840 发表于 2017-10-25 22:29
今天又调了下程序,200HZ以下的频率调了原值为520400000的数据,调为520900000后,测量200HZ以下的信号和 ...

另外我想把低频测量改为1000HZ以下可以吗?
回复 支持 反对

使用道具 举报

     
发表于 2017-10-26 00:47:10 来自手机 | 显示全部楼层
cuijl1881840 发表于 2017-10-26 00:36
另外我想把低频测量改为1000HZ以下可以吗?

是把低频测量改为1000HZ以下用周期法。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2017-10-26 08:04:03 | 显示全部楼层
cuijl1881840 发表于 2017-10-26 00:47
是把低频测量改为1000HZ以下用周期法。

if (kk<200) //小于1000HZ使用测量周期法
{//这句里的200修改成1000即可。200到1000这个范围测周期法精度逐步降低,所以我设置成200以下使用周期法,你可以实验一下。至于高频精度,如果使用准确的晶振,我试验20M以上误差是12hz.往下被测频率降低一半,误差降低一半最小1hz。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-26 08:37:24 来自手机 | 显示全部楼层
ygnlhxyzj 发表于 2017-10-26 08:04
if (kk

我用的是四脚的有源晶振,用台式频率计测量为25.0003MHZ,而且持续观察半小时左右,频率很稳定,一个字也没有跳,都算稳定了。用之前的版本是正误差,调不下来,但是用现在新版本是负误差,反复试验,如果把TH0调高的话,KHZ位就会加1或者2的读数,此时再调TL0的话,HZ位的读数下降不明显,没法把KHZ位读数降下来。仿制这个频率计的原因一是兴趣爱好,二是用来外出时测对讲机频率,看好单片机版本用原件少,可以装在小盒子来方便外出携带,但是要准确测量几百MHZ的频率,就要把低频档调到准确才行,因为高频档测量时实际就是测MB506分频后的低频信号,那怕是1HZ的误差也是乘以128的!
回复 支持 反对

使用道具 举报

     
发表于 2017-10-26 09:48:07 | 显示全部楼层
cuijl1881840 发表于 2017-10-26 08:37
我用的是四脚的有源晶振,用台式频率计测量为25.0003MHZ,而且持续观察半小时左右,频率很稳定,一个字也 ...

Build target 'Target 1'
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?READDATALCM?20171025_____25MHZ晶振
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_WRITECOMMANDLCM?20171025_____25MHZ晶振
    CALLER1: ?PR?TIMER0INTERRUPT?20171025_____25MHZ晶振
    CALLER2: ?C_C51STARTUP
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_DISPLAYUNLONG?20171025_____25MHZ晶振
    CALLER1: ?PR?TIMER0INTERRUPT?20171025_____25MHZ晶振
    CALLER2: ?C_C51STARTUP
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_DISPLAYONECHAR?20171025_____25MHZ晶振
    CALLER1: ?PR?TIMER0INTERRUPT?20171025_____25MHZ晶振
    CALLER2: ?C_C51STARTUP
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_WRITEDATALCM?20171025_____25MHZ晶振
    CALLER1: ?PR?TIMER0INTERRUPT?20171025_____25MHZ晶振
    CALLER2: ?C_C51STARTUP
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_DISPLAYLISTCHAR?20171025_____25MHZ晶振
    CALLER1: ?PR?TIMER0INTERRUPT?20171025_____25MHZ晶振
    CALLER2: ?C_C51STARTUP
Program Size: data=50.0 xdata=0 code=1715
creating hex file from "20171025     频率计最新版本"...
"20171025     频率计最新版本" - 0 Error(s), 6 Warning(s).



编译时出了6个警告
回复 支持 反对

使用道具 举报

     
发表于 2017-10-26 20:05:38 | 显示全部楼层
这个不容易,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-6-1 16:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表