搜索
bottom↓
回复: 2

ATmega16输入捕获功能测方波频率

[复制链接]

出0入0汤圆

发表于 2011-8-18 11:25:43 | 显示全部楼层 |阅读模式
软件平台:AVR Stadio4
硬件平台:ATmega16最小系统
程序功能:用输入捕获功能计算方波频率
存在问题:输出频率有时对有时不对
想请教大家程序哪里有问题?

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include "LCD1602.h"

#define uint unsigned int
#define uchar unsigned char

uint Rising_Edge,Falling_Edge;
volatile uchar i=0;
uint count;                        //the number of Overflow
uint Freq;
uchar F_Num[6];

void Convert_Num(uint Num)
{
        F_Num[0]=Num/10000+0x30;
        F_Num[1]=Num%10000/1000+0x30;
        F_Num[2]=Num%1000/100+0x30;
        F_Num[3]=Num%100/10+0x30;
        F_Num[4]=Num%10+0x30;
        F_Num[5]='\0';       
}

int main(void)
{
        LCD_Init();
        DDRD&=0x00;
        PORTD|=0xFF;
        TCCR1A=0x00;        //all normal mode

        TCNT1=0x0000;
        TIMSK=0x24;                //input capture interrupt enable,and overflow enable
        TIFR=(1<<ICF1);
        TCCR1B=0x44;        //input capture enable rising_edge,Freq:F(I/O)/256,
        sei();
        LCD_Display(1,1,"Freq:");
        while(i<2)
        {;}
        TCCR1B&=0xF8;
           TCNT1=0x0000;       

        Convert_Num(Rising_Edge);
        LCD_Display(1,6,F_Num);

        Convert_Num(Falling_Edge);
        LCD_Display(1,12,F_Num);

        Convert_Num(count);
        LCD_Display(2,1,F_Num);

        Freq=(uint)(31250.0/((float)(Falling_Edge)+((float)(count)*65536.0)-(float)(Rising_Edge)));        //the cycle of the waveform
        Convert_Num(Freq);
        LCD_Display(2,7,F_Num);
}

ISR(TIMER1_CAPT_vect)
{
        if(i==0)
                Rising_Edge=ICR1;
        else if(i==1)
                Falling_Edge=ICR1;       
        else ;

        i++;               
}

ISR(TIMER1_OVF_vect)
{
        count++;       
}

出0入0汤圆

 楼主| 发表于 2011-8-18 11:32:17 | 显示全部楼层
回复【楼主位】chenccl
-----------------------------------------------------------------------

另外:在程序中加入输入捕获的滤波后,程序就不能正常运行了,似乎是停留在While死循环那里

出0入0汤圆

 楼主| 发表于 2011-8-18 14:48:49 | 显示全部楼层
程序调试通过了,出错原因是:信号的幅值不够,应到3v左右。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 10:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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