搜索
bottom↓
回复: 1

新手学AVR:M32+Proteus+GCC,使用T/C1输出比较模式得到20kHz方波信号时诡异的频率问

[复制链接]

出0入0汤圆

发表于 2010-4-10 09:42:22 | 显示全部楼层 |阅读模式
利用AVR的T/C1的OC1A引脚输出50%占空比20kHz方波,并用频率计测量,结果遇到一个百思不得其解的问题:
T/C1设置为比较输出模式,时钟为1M无分频,源程序很简单,如下:
#include<avr/io.h>
#include<avr/interrupt.h>
#define counter 25


SIGNAL(TIMER1_COMPA_vect)  // T/C1 ISP
{
     OCR1A=OCR1A+counter;             //SET TO NEXT MATCH (TOGGLE) POINT
}

int main(void)
{
     DDRD|= (1<<PIND5);     //SET OC1A BIT (PIND5) FOR OUTPUT
         TCCR1A|= (1<<COM1A0);           //SET PRESCALER TO Clock(1M,1us colck)
         TCCR1B|= (1<<CS10);            //enable output compare mode to toggle OC1A pin on match
         TIMSK|= (1<<OCIE1A);           //UNMASK OUTPUT COMPARE MATCH INTERRUPT FOR OC1A
         sei();                         //set global interrupt bit
         while(1)
         ;
}
得到的结果却让我瞠目结舌,输出居然只有8Hz!与预期的20kHz可相差太远了!
仿真结果如下:

debug result (原文件名:debug result.jpg)
我试着输出11kHz,10kHz或更低的频率,都正常.但12kHz就出现上面的问题,频率计显示与预期相差很大很大
再试着调整MCU时钟频率,在8M无分频下可以输出80kHz,但再高也会出现上面同样的问题.
是不是可以这样理解,AVR的T/C最高输出频率为大概十分之一MCU时钟频率?
请各位老大们指点,多谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-4-14 10:44:10 | 显示全部楼层
实际用T/C0也有同样的问题,TCNT设置100和101,输出频率变化达0.42517Khz。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 02:39

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

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