采用单片机及液晶器件的宽频的频率计设计,digital frequency meter
关键字:atmega8,频率计电路图
我们常用到的实验仪器之一——频率计,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。
期望达到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 : 显示字符串的位置
-----------------------------------------------------------------------*/
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 :汉字显示的行间距
-----------------------------------------------------------------------*/
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 :移动速度;
-----------------------------------------------------------------------*/
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 :位图像素(宽)
-----------------------------------------------------------------------*/
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 :写数据/命令选择;
-----------------------------------------------------------------------*/
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
}
RT-Thread记录(十四、I/O 设备模型之ADC设备)
LiClO4-PVDF导锂型粘结剂和电极浆料工艺助推硫化物全固态电池规模化制造
微软 Mojang 官宣《Minecraft Earth》将于 6 月 30 日关闭
需求技术双驱动 中国安防监控市场规模高速增长
西部数据推出WD_BLACK P10 CFHD 限量版游戏硬盘, 开启硬派畅玩游戏体验
采用单片机及液晶器件的宽频的频率计设计,Digital frequency meter
LG获得了几年前向美国专利商标局申请的“移动终端”专利
对于音圈马达,如何对其进行科学地维护和保养
荣耀8最新消息:良心降价!京东好评率超44万,这部高颜值的荣耀8现要1599!
即将发布!新款iPad Pro或将搭载A14X芯片
阿里研发全球首个实时翻译直播
阿克希龙电能管理系统
深度测评Jeep自由侠1.4T
一个超实用的EDA工具,免费的EDA工具
基于AD608芯片的对数中频低功耗接收机设计
铜排设计规范规范铜排结构件设计
新品面世|自连智能定位传感器 解锁一站式智慧管理
小米IPO后首份财报:二季度总收入452.36亿元,同比增长68.3%
OPPO Reno 2Z入网工信部,已在印度市场正式开售
vr在生活中的应用案例分析