|
基于avr单片机的频率计的仿真原理图
俺毕业设计的小玩意.也许有人可以拿去玩.
当时刚出毕业选题就赶紧的选了这个简单的.免得以后为毕业设计费神.
这是最初的,后来给学校也是交的这个. 花了三天时间.
//*********************11月29日开始毕业选题
读了一点频率计原理,高频记数,低频测周期 规划了一下大体,坚决不用老师指定的51,
//*********************11月30日开始写代码
凑合着开始了,偏差很大,很无聊,晚上跟123JJ在51hei灌水,灌了阵找到思维了,继续写,基本完成
//*********************12月1日调试
写了个串口上位机对数据进行分析和记录,方便多了.仔细的调了下.不管他效率和规范了,出结果了就要得,马虎的收工了.
16MHz晶振,范围1Hz--5MHz,软件仿真测周期误差<1/8us.计数误差最大可能1hz. 当然液晶显示误差就大多了.显示位数有限.随便忽悠一下, 可以给老师交差了.前端信号处理和pcb以后再弄.
后来前端处理参照冬瓜哥的精华帖和建议,把CD4069作运放用.
感谢冬瓜哥给我打板,搭顺路车.
后来在寒假发神经又琢磨了一下,修改下代码,加上些别的东西,反正资源还足够,有些作了测试,有些只是空想,规划和写代码,没有测试.脉宽和占空比,电压表,示波器,欧姆表,信号发生器,温度计,电容表,电感表,逻辑仪,红外分析,弄了5,6天又停了,人太懒.再后来又忘干净了,只记得电容表是测充电时间.
再后来,写毕业论文,网上下了n多资料和论文用来copy,弄的电脑很乱,写到一半,实在太乱,文件整理中,大把的删文件夹,一不小心把软件都删了,还好在qq群共享里留下了这个最初版本.好险.差点作无用功.
下面是智能频率计的原理图是用ad画的.
下面是主程序的源程序:
- #ifndef main_c //test ok
- #define main_c
- #endif
- #include "main.h"
- //************************全局变量
- volatile uint t0_cont;
- volatile uint t1_cont;
- volatile uchar flg1; //
- //-------------------------------------------------------------------------
- // 测试函数 用来初始化
- //-------------------------------------------------------------------------
- void test()
- {
- send_str( "pinlvji" ); //完成后把所有串口去掉
- showstr( "cymometer", 1, 1, 9 ); //液晶显示
- // showstr( "1KHz", 12, 1, 4 );
- showstr( "Hz", 14, 2, 2 );
- }
- //-------------------------------------------------------------------------
- //mcu初始化 端口 定时器 中断 外中断 变量
- //-------------------------------------------------------------------------
- void mcu_init()
- {
- //******************端口
- data_direc = out; //输出
- DDRB = out; //输出
- DDRC = out; //输出
- PORTC = 0X00; //输出0
- DDRB=0XE0; //输入口
- PORTB=0XE9;
- //********************定时器
- TIMSK |= 0x12; //定时中断允许位 只允许两个匹配
- }
- //-------------------------------------------------------------------------
- // 主函数
- //-------------------------------------------------------------------------
- int main()
- {
- uchar f_t; //用测频还是测周
- //******************
- mcu_init(); //初始化
- usart_init( 57600 ); //初始化
- send_str( "com ok" ); //完成后把所有串口去掉
- yj_set( 0x38, 0x0f, 0x06 ); //初始化
- clearall(); //初始化
- mzd_on(); //开中断
- #if debug
- test();
- #endif
- while ( 1 )
- {
- if ( !( PINB& ( 1 << 3 )))
- {
- refish(); //刷新所有的东西
- f_t = hz_try(); //估计范围 1k
- if ( f_t )
- {
- cl_f(); //频率法
- }
- else
- {
- cl_t(); //周期法
- }
- }
- }
- return 1;
- }
复制代码 cale.c
所有资料下载:
一种智能频率计的设计与制作(AVR).rar
(132.94 KB, 下载次数: 59)
|
|