问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

电气的大侠们帮帮忙,数字频率计的设计,小弟我感激不敬!

发布网友 发布时间:2022-06-10 06:00

我来回答

4个回答

热心网友 时间:2024-09-04 15:32

频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。

期望达到10Hz-1.1G范围的频率精确测量。

实验电路图(初步方案)
1) 计数及显示电路:

2)前置放大及分频电路:

设计思路
频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。

由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用单片机的计数器直接测量信号频率就受到了很大的*。

本实验电路采用方式2,使用一片74LS393四位双二进制计数器和Atmega8的 T1计数器组成了24位计数器,最大计数值为16777215。如果输入信号经过MB501分频器进行64分频后再进行测量,则固定1S时基下最高测量频率为1073.741760Mhz。

为了方便得到准确的1秒钟测量闸门信号,我们使用了Atmega8的异步实时时钟功能,采用32.768Khz的晶振由TC2产生1秒钟的定时信号。

测量原理:

单片机打开测量闸门,即PB1输出高电平,同时TC2定时器启动。74LS393开始对输入脉冲进行计数,74LS393每计数达256时,Atmega8的T1计数器也向上计数1次。当1S定时到达时,单片机产生中断,PB1输出低电平关闭测量闸门,然后Atmega8读取74LS393和T1的计数值,然后送LCD显示。

实验进展

2004-09-27

根据设计思路编写程序初步获得了一些实验结果,如下图所示。下图是测量8M有源晶振的输出结果。

由于1S的测量闸门时间在业余条件下不好测试,因此,实验程序中在LCD上同时显示实时时钟用于判断1S闸门时间的准确性。实验中,我使用CDMA手机上显示的GPS卫星精确时间进行比较。手机时间显示的最小单位是分钟,测量时一旦手机分钟值发生跳变,则立即记录下LCD显示的秒值,这样的话让频率计运行一段时间后,再多次记录下LCD显示的秒,就可以准确判断频率计的异步时钟是否准确。实验过程中,我让频率计走了10个小数左右,测量的1S时钟还是非常准确的。

#include
#include
#include lcd.h
#include 6x8.h
#include chinese.h

/*-----------------------------------------------------------------------
LCD_init : 3310LCD初始化

编写日期 :2004-8-10
最后修改日期 :2004-8-10
-----------------------------------------------------------------------*/
void LCD_init(void)
{
PORTB &= ~LCD_RST; // 产生一个让LCD复位的低电平脉冲
delay_1us();
PORTB |= LCD_RST;

PORTB &= ~LCD_CE ; // 关闭LCD
delay_1us();
PORTB |= LCD_CE; // 使能LCD
delay_1us();

LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
LCD_write_byte(0xc8, 0); // 设置偏置电压
LCD_write_byte(0x06, 0); // 温度校正
LCD_write_byte(0x13, 0); // 1:48
LCD_write_byte(0x20, 0); // 使用基本命令
LCD_clear(); // 清屏
LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

PORTB &= ~LCD_CE ; // 关闭LCD
//LCD_clear();
}

/*-----------------------------------------------------------------------
LCD_clear : LCD清屏函数

编写日期 :2004-8-10
最后修改日期 :2004-8-10
-----------------------------------------------------------------------*/
void LCD_clear(void)
{
unsigned int i;

LCD_write_byte(0x0c, 0);
LCD_write_byte(0x80, 0);

for (i=0; i<504; i++)
LCD_write_byte(0, 1);
}

/*-----------------------------------------------------------------------
LCD_set_XY : 设置LCD坐标函数

输入参数:X :0-83
Y :0-5

编写日期 :2004-8-10
最后修改日期 :2004-8-10
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0); // column
LCD_write_byte(0x80 | X, 0); // row
}

/*-----------------------------------------------------------------------
LCD_write_char : 显示英文字符

输入参数:c :显示的字符;

编写日期 :2004-8-10
最后修改日期 :2004-8-10
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c)
{
unsigned char line;

//c -= 32;

//for (line=0; line<6; line++)
//LCD_write_byte(font6x8[c][line], 1);
for (line=0; line<7; line++)
LCD_write_byte(font7x13[c][line], 1);
for (line=7; line<14; line++)
LCD_write_byte(font7x13[c][line], 1);

}

/*-----------------------------------------------------------------------
LCD_write_char : 英文字符串显示函数

输入参数:*s :英文字符串指针;
X、Y : 显示字符串的位置

编写日期 :2004-8-10
最后修改日期 :2004-8-10
-----------------------------------------------------------------------*/
void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
unsigned char line;
unsigned char i=0;
while (*s)
{
LCD_set_XY(X+i*7,Y);
for (line=0; line<7; line++)
LCD_write_byte(font7x13[*s-0X30][line], 1);

LCD_set_XY(X+i*7,Y+1);
for (line=7; line<14; line++)
LCD_write_byte(font7x13[*s-0X30][line], 1);
s++;
i++;
}
}
/*-----------------------------------------------------------------------
LCD_write_chi: 在LCD上显示汉字

输入参数:X、Y :显示汉字的起始X、Y坐标;
ch_with :汉字点阵的宽度
num :显示汉字的个数;
line :汉字点阵数组中的起始行数
row :汉字显示的行间距
编写日期 :2004-8-11
最后修改日期 :2004-8-12
-----------------------------------------------------------------------*/
void LCD_write_chi(unsigned char X, unsigned char Y,
unsigned char ch_with,unsigned char num,
unsigned char line,unsigned char row)
{
unsigned char i,n;

LCD_set_XY(X,Y); //设置初始位置

for (i=0;i{
for (n=0; n{
if (n==ch_with) //写汉字的下半部分
{
if (i==0) LCD_set_XY(X,Y+1);
else
LCD_set_XY((X+(ch_with+row)*i),Y+1);
}
LCD_write_byte(china_char[line+i][n],1);
}
i++;
LCD_set_XY((X+(ch_with+row)*i),Y);
}
}

/*-----------------------------------------------------------------------
LCD_write_chi: 汉字移动

输入参数:X、Y :显示汉字的起始X、Y坐标;
T :移动速度;

编写日期 :2004-8-13
最后修改日期 :2004-8-13
-----------------------------------------------------------------------*/
void LCD_move_chi (unsigned char X, unsigned char Y, unsigned char T)
{
unsigned char i,n,j=0;
unsigned char buffer_h[84]={0};
unsigned char buffer_l[84]={0};

for (i=0; i<156; i++)
{
buffer_h[83] = china_char[i/12][j];
buffer_l[83] = china_char[i/12][j+12];
j++;
if (j==12) j=0;

for (n=0; n<83; n++)
{
buffer_h[n]=buffer_h[n+1];
buffer_l[n]=buffer_l[n+1];
}

LCD_set_XY(X,Y);
for (n=0; n<83; n++)
{
LCD_write_byte(buffer_h[n],1);
}

LCD_set_XY(X,Y+1);
for (n=0; n<83; n++)
{
LCD_write_byte(buffer_l[n],1);
}

delay_nms(T);
}
}

/*-----------------------------------------------------------------------
LCD_draw_map : 位图绘制函数

输入参数:X、Y :位图绘制的起始X、Y坐标;
*map :位图点阵数据;
Pix_x :位图像素(长)
Pix_y :位图像素(宽)

编写日期 :2004-8-13
最后修改日期 :2004-8-13
-----------------------------------------------------------------------*/
void LCD_draw_map(unsigned char X,unsigned char Y,unsigned char *map,
unsigned char Pix_x,unsigned char Pix_y)
{
unsigned int i,n;
unsigned char row;

if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
else
row=Pix_y/8+1;

for (n=0;n{
LCD_set_XY(X,Y);
for(i=0; i{
LCD_write_byte(map[i+n*Pix_x], 1);
}
Y++; //换行
}
}

/*-----------------------------------------------------------------------
LCD_write_byte : 使用SPI接口写数据到LCD

输入参数:data :写入的数据;
command :写数据/命令选择;

编写日期 :2004-8-10
最后修改日期 :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char data, unsigned char command)
{
PORTB &= ~LCD_CE ; // 使能LCD

if (command == 0)
PORTB &= ~LCD_DC ; // 传送命令
else
PORTB |= LCD_DC ; // 传送数据

SPDR = data; // 传送数据到SPI寄存器

while ((SPSR & 0x80) == 0); // 等待数据传送完毕

PORTB |= LCD_CE ; // 关闭LCD
}

热心网友 时间:2024-09-04 15:33

这个哪个学校的课设?我靠。。真牛*啊。。我这个学期做的课设是电感测粗糙度,看样子比你的要简单点,先小得意下。。

热心网友 时间:2024-09-04 15:33

这个哪个学校的课设?我靠。。真牛*啊。。我这个学期做的课设是电感测粗糙度,看样子比你的要简单点,先小得意下。。 不该找电气的大侠……电气是读强电的,你这个是弱电,应该找电子电信之类的大侠

热心网友 时间:2024-09-04 15:34

你不该找电气的大侠……电气是读强电的,你这个是弱电,应该找电子电信之类的大侠
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 单片机简易数字频率计 日语的五十音图怎么学? 如何学好五十音图? 四川省市政质量员挂靠一年多少钱 施工员和质量员挂靠那个危险 孕妇能喝桃汁吗 搬家要从老家引火吗 从老家搬到城里去,搬家时有啥说道? 梦到种香菜在地里挖出很多杏 搬家看的时间一般是那个时间从老家走,还是那个时间到新家?、 梦到家里香菜长的很好给它浇水什么意思 怎么手机开通手机农信银行开户 要想在河南农信注册时,银行卡必须开通手机业务吗? 手机银行向农信卡怎么转帐?收费吗? 在职博士招生的高校有哪些 开通农村信用社网上银行免费吗 手机下载农信银行收费吗? 北京有哪些学校招收在职博士研究? 五行缺金的姓施男孩,名字中不带铭,铖的可以取哪些名字? 丁睿铖这名字好听吗?男孩羊年五行缺金2015年11月初四出生 高分求简易的数字频率计设计 急用 821933730@qq.com 要求如下 (220分)速求:简易数字频率计设计方案 饶氏族谱字辈顺序有文字辈吗 银行卡开通手机语音业务扣费吗农村信用社一卡通开通手机语音业务收费吗... 怎么挽回走得太快的感情!? 情人男吵架不联系2个月后,又加了我微信,但是不约我出去,我约他,他总... 高中时喜欢过一个人后来失联了,应该怎么办? 在领导群里说错话(微信群)怎么挽回?救急,谢啦 萧山卫生中等专业学校是不是3+3 杭州滨江区有哪些大专 保安做到六不准是什么 鸡蛋为什么会浮起来呢 道理 鸡蛋浮起来的原因 关于镜花水月的文章可有? 镜花水月的曲目 一朝看花花事空 百年读月月身同 镜花水月何从影 云散缘由不是风 什么意... 解签:镜里看花 林立铠的作文 什么东西在水下可发涨? 为什么有机污渍一般都是酸性?