搜索
bottom↓
回复: 18

avr输出频率

[复制链接]

出0入0汤圆

发表于 2012-4-27 14:23:56 | 显示全部楼层 |阅读模式
我用的是atmega88,想通过用定时器0来输出pwm,频率为1MHz,不知道怎么回事,只能到29.3KHz,我用的是pc3输出的
给我指点一下
代码如下:
void Timer0_Init()
{
  TCCR0A = 0X02; //
  TCCR0B = 0X00; //关闭timer0
  TCNT0  = 0X00; //计数寄存器
  OCR0B  = 0X80; //比较 寄存器
  TCCR0B = 0X01; //开启timer
}

出0入0汤圆

 楼主| 发表于 2012-4-28 12:20:52 | 显示全部楼层
着急用啊,都来看看啊

出0入0汤圆

发表于 2012-4-28 12:46:02 | 显示全部楼层
TCCR0A设置不对,M88的pc3也没有PWM输出。
不看手册啊!

出0入0汤圆

 楼主| 发表于 2012-4-28 13:56:03 | 显示全部楼层
zhanan 发表于 2012-4-28 12:46
TCCR0A设置不对,M88的pc3也没有PWM输出。
不看手册啊!

我用的是中断,比较中断的时候置1,溢出中断的时候置0,
用的是快速pwm
void Timer0_Init()
{
  TCCR0A = 0X03; //
  TCCR0B = 0X00; //关闭timer0
  TCNT0  = 0X00; //计数寄存器
  OCR0A  = 0X20; //top值
  OCR0B  = 0X10; //比较 寄存器
  TCCR0B = 0X09; //开启timer
}

出0入0汤圆

发表于 2012-5-1 09:07:11 | 显示全部楼层
本帖最后由 zhanan 于 2012-5-1 09:08 编辑

哪有这样用PWM的,还想达到1M频率。
就算用16M晶振,快速PWM也只能达到16000/(20+1)=762Khz。
OCR0A=15,理论上达到1M频率了,但4位分辨率的PWM有实际用途吗?

用中断实现的话,进出中断用的时间在这里就相当可观了。

出0入0汤圆

发表于 2012-5-1 09:46:35 | 显示全部楼层
使者0123 发表于 2012-4-28 12:20
着急用啊,都来看看啊

仔细看看手册就知道了,1M的频率是达不到的

出0入0汤圆

发表于 2012-5-1 10:21:06 | 显示全部楼层
PWM模式1M是输出不了的,CTC模式到是可以,但是占空比不可调是否有用?
8位的MCU要做到1M的PWM输出还是比较少的,500K可以的话可以看一下ATTINY25 26 261之类的。

出0入0汤圆

 楼主| 发表于 2012-5-2 10:12:49 | 显示全部楼层
zhanan 发表于 2012-5-1 09:07
哪有这样用PWM的,还想达到1M频率。
就算用16M晶振,快速PWM也只能达到16000/(20+1)=762Khz。
OCR0A=15, ...

我也不想这么用啊,但是那些引脚都被占用了,没得用了

如果不用中断的话,可以输出1M吗?

出0入0汤圆

 楼主| 发表于 2012-5-2 10:15:26 | 显示全部楼层
wzyllgx 发表于 2012-5-1 10:21
PWM模式1M是输出不了的,CTC模式到是可以,但是占空比不可调是否有用?
8位的MCU要做到1M的PWM输出还是比较 ...

我的CTC模式,最高能到80.2KHz
怎么让它到1M,占空比不可调也没关系

出0入0汤圆

发表于 2012-5-2 11:31:52 | 显示全部楼层
根据CTC的计算工式:fOCnA = fclk_I/O / 2 ⋅ N ⋅ (1 + OCRnA),但这必须是CTC输出IO,你看IO对就的第二功能。

出0入0汤圆

发表于 2012-5-2 12:09:45 | 显示全部楼层
LZ的现在实现是否是这样的:
只用定时器来产生中断(而不是直接输出PWM波形,因输出引脚被占用),在中断服务程序中翻转PC3,从而产生波形。
如LS所示,T0的CTC模式输出波形频率最快可达fclk_I/O / 2,中断产生频率最快可达fclk_I/O(当然不能使用这么快),
所以要产生1M的波形,关键取决于进出中断的时间和系统时钟。

使用较高的系统时钟 优化代码 即可实现1Mhz的波形输出,占空比也很可观。

出0入0汤圆

 楼主| 发表于 2012-5-2 12:25:45 | 显示全部楼层
ok  明白了
只有特定的IO才能按照公式去计算频率,才能产生更高的频率

出0入0汤圆

 楼主| 发表于 2012-5-2 12:25:59 | 显示全部楼层
iProduct 发表于 2012-5-2 12:09
LZ的现在实现是否是这样的:
只用定时器来产生中断(而不是直接输出PWM波形,因输出引脚被占用),在中断服 ...

嗯 ,就是你说的那样

出0入0汤圆

 楼主| 发表于 2012-5-2 12:26:14 | 显示全部楼层
谢谢大家的回答,让我懂得了很多

出0入0汤圆

发表于 2012-5-16 12:53:48 | 显示全部楼层
使者0123 发表于 2012-5-2 12:26
谢谢大家的回答,让我懂得了很多

定时0.5us中断,中断到就取反

出0入0汤圆

发表于 2012-5-17 13:28:34 | 显示全部楼层
本帖最后由 machao 于 2012-5-17 13:29 编辑
raxb 发表于 2012-5-16 12:53
定时0.5us中断,中断到就取反


产生一个固定频率的方波,定时器应该采用比较匹配输出的方式,根本不需要用任何的中断。使用16M系统时钟,AVR可以产生最高4M的方波序列,同时还有充足的时间做其它的事情。

中断取反,是老51的概念,以经OUT、OUT、呕吐了,怎么还是抱着老的东西舍不得丢弃。关于这个问题,我在的这个讨论组中曾经发过专贴“http://www.ourdev.cn/forum.php?m ... st%3D1%26digest%3D1

楼上的朋友,购买一本我的教材吧,认真从基础扎实的学起。

出0入0汤圆

发表于 2012-5-17 14:15:00 | 显示全部楼层
machao 发表于 2012-5-17 13:28
产生一个固定频率的方波,定时器应该采用比较匹配输出的方式,根本不需要用任何的中断。使用16M系统时钟 ...

多谢马老师批评指正,很受教,只是我是很不熟悉AVR,不知道其它单片机是否有此功能...

出0入0汤圆

发表于 2012-5-17 14:25:56 | 显示全部楼层
raxb 发表于 2012-5-17 14:15
多谢马老师批评指正,很受教,只是我是很不熟悉AVR,不知道其它单片机是否有此功能... ...

新的控制器中,定时器都是这样。AVR\STM32\M8......就是改良的51,定时器也有此功能。你找STC51的新型51数据手册看一下吧。
这也是我推荐学习AVR的原因之一。学习要学新的东西,掌握好的技术。
现在大学中这个领域的教育和教师,都是OUT的,所以学生也是OUT的。更可怕的是,还没有清楚的认识到,大谈什么“创新”教育,连目前在技术上发展的新东西,新方法、新思路都不知道,还谈什么“创新”?呕吐!

出0入0汤圆

 楼主| 发表于 2012-5-25 18:28:38 | 显示全部楼层
machao 发表于 2012-5-17 14:25
新的控制器中,定时器都是这样。AVR\STM32\M8......就是改良的51,定时器也有此功能。你找STC51的新型51 ...

说的太好了,就该掌握新技术,大学里面教的东西都太落后了,早就跟社会拖节了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 21:39

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

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