论坛风格切换切换到宽版
  • 2400阅读
  • 10回复

谁有便携HF频率计? [复制链接]

上一主题 下一主题
离线永远的FM
 
发帖
12174
只看楼主 倒序阅读 0楼 发表于: 2008-02-22
本人需要一台能在0~50mhz测量,分辨率1hz的便携式频率计,谁能提供?或者电路图也行
离线7600
发帖
16353
只看该作者 1楼 发表于: 2008-02-22
本潭有卖,深圳的那位,名字忘记了,不过分辨率没那么高。
离线永远的FM
发帖
12174
只看该作者 2楼 发表于: 2008-02-22
其实分辨率不用那么高,到100hz就够了
请问楼上说的是不是bg7kh?
离线小比尔/5
发帖
2582
只看该作者 3楼 发表于: 2008-02-22
如果要100hz就容易了
到bd6cr的主页上看看吧
把那个频率计稍微改一下就可以了
我的测到25mhz没问题
用0802液晶屏就可以做得很小巧
离线永远的FM
发帖
12174
只看该作者 4楼 发表于: 2008-02-22
楼上能给个连接吗?
离线小比尔/5
发帖
2582
只看该作者 5楼 发表于: 2008-02-22
好的。
不好意思我现在的网速比较慢。
《简易短波电台频率指示板》,链接:
http://www.qsl.net/bd6cr/fc/
离线小比尔/5
发帖
2582
只看该作者 6楼 发表于: 2008-02-22
这是我改过的程序。
用的是0802的lcm,因为是比较早做的,所以程序有点改乱了。
楼主看着用吧。:)

/* mcu xtal freq. 12.000mhz */
/* contains 0802 lcm driver */

/* 1 second gate */

#include <at892051.h>
#include <string.h>

#define lcd_rs p3_0     /* switch register: command/data */
#define lcd_rw p3_1     /* switch mode:!write/read */
#define lcd_en p3_4     /* lcd operation enable */
#define lcd_data p1
#define lcd_clear 0x01
#define max_x 0x10       /* defines how many ltr can be disp.in a row. */
#define max_y 0x02               /* defines how many ltr can be disp.in a line. */

#define uchar unsigned char
#define uint unsigned int

/* the declaration of some functions about lcd driver */
void delay5ms(void);
void delay400ms(void);
void lcd_wrtcmd(uchar command, busy_c);
void init_lcd(void);
uchar get_lcd_status(void);
void lcd_wrtdata(uchar data);
void putcharxy(uchar x,uchar y,unsigned disp_data);
void outtextxy(uchar x,uchar y,uchar *disp_data);

/* for counter */
uchar timer0_count = 0, timer1_count = 0;
uchar temp1, temp2, temp3;
uchar tag = 0;

/* timer0 */
void timer0() interrupt 1 using 1
{
timer0_count ++;
if (timer0_count==16) {
     ea = 0;
     tag = 1;
     tr1 = 0;
     tr0 = 0;
     temp1=timer1_count;
     temp2=th1;
     temp3=tl1;
     th0=189;
     tl0=208;
     timer1_count=0;
     th1=0;
     tl1=0;
     tr0=1;
     tr1=1;
     ea=1;
     timer0_count=0;
}
}

void timer1() interrupt 3 using 2
{
timer1_count ++;
}


/* main function */

void main(void)
{
  unsigned long count;
     uchar freq[9];
     unsigned long res;
     uchar i;
  delay400ms();
  init_lcd();
     outtextxy(0,0,"ham freq");
  outtextxy(0,1,"counter!");
     for(i=5;i>0;i--) delay400ms();

  tmod = 0x51;   //tmr1 external input: 0x51
     ie = 0x8a;
  ip = 0x08;     //timer1 piority higher than timer0
     th0= 189;
     tl0= 208;
     th1 = 0;
     tl1 = 0;
  tr0 = 1;        //start tmr0 here
     tr1 = 1;

  while(1)
     {
    if(tag){
      count = temp1 * 65536;
      count = count + temp2*256;
      count = count + temp3;
                       
      res=100000;
            for(i=0;i<8;i++)
            {
            if(i==2) continue;
            if(i==6) continue;
            freq=count/res+Ɔ'
            count%=res;
            res/=10;
            }
            freq[2]=','
            freq[6]='.'
            freq[8]='\0'
            outtextxy(0,0,"freq:khz");
      outtextxy(0,1,freq);
            }
     }
}


void init_lcd(void)
{
  lcd_data=0;
  lcd_wrtcmd(0x38,0);
     /* two lines, 5x7 font style, no cursors, no blink */
  delay5ms();
  lcd_wrtcmd(0x38,0);
  delay5ms();
  lcd_wrtcmd(0x38,0);
  delay5ms();
  lcd_wrtcmd(0x38,1);
  lcd_wrtcmd(0x80,1);
  lcd_wrtcmd(lcd_clear,1);
  lcd_wrtcmd(0x06,1);
  lcd_wrtcmd(0x0c,1);
}

uchar get_lcd_status(void)
{
  lcd_data=0xff;
  lcd_en=0;
  lcd_en=0;
  lcd_rw=1;
  lcd_rs=0;
  lcd_en=1;
  while(lcd_data & 0x80);
     lcd_en=0;
  return lcd_data;
}

void lcd_wrtdata(uchar data)
{
  lcd_en=0;
  get_lcd_status();
  lcd_data=data;
  lcd_rs=1;
  lcd_rw=0;
  lcd_en=0;
     lcd_en=0;
     lcd_en=1;
     lcd_en=1;
     lcd_en=0;
}

void lcd_wrtcmd(uchar command, busy_c)
{
     lcd_en=0;
     if(busy_c) get_lcd_status();
  lcd_data=command;
  lcd_rs=0;
  lcd_rw=0;
  lcd_en=0;
     lcd_en=0;
     lcd_en=1;
     lcd_en=1;
     lcd_en=0;
}

void putcharxy(uchar x,uchar y,unsigned disp_data)
{
  y=y&(max_y-1);
  x=x&(max_x-1);
  if(y) x+=0x40;
  x+=0x80;
  lcd_wrtcmd(x,1);
  lcd_wrtdata(disp_data);
}

void outtextxy(uchar x,uchar y,uchar *disp_data)
{
  uchar char_length,j;
  char_length=strlen(disp_data);
  y=y&(max_y-1);
  x=x&(max_x-1);
  for (j=0;j<char_length;j++)
  {
    putcharxy(x,y,disp_data[j]);
    x++;
  }
}

void delay5ms(void)
{ uint i=6025;while(i--); }

void delay400ms(void)
{
  uchar i=5; uint j;
  while(i--)
  { j=7888; while(j--); }
}
离线bg2rah
发帖
7065
只看该作者 7楼 发表于: 2008-02-22
嘻嘻,我的万用表带频率计,方便.
离线永远的FM
发帖
12174
只看该作者 8楼 发表于: 2008-02-22
谢谢!不过我想还是要个直接能用得比较好。。。。。。。
现在想改ft-180a,没有仪器很难搞
离线小比尔/5
发帖
2582
只看该作者 9楼 发表于: 2008-02-23
那你就买个8位的频率计吧,便宜的可能一百多块钱就有了。
离线BG7KH
发帖
4815
只看该作者 10楼 发表于: 2008-02-23
gy460,带加,减中频,0.1-40m

61元。