搜索
bottom↓
回复: 16

请教:M88 1MHz T0中断为何做不到13us的响应时间?

[复制链接]

出0入4汤圆

发表于 2019-10-15 08:09:23 | 显示全部楼层 |阅读模式
本帖最后由 BS_good200xy 于 2019-10-15 08:11 编辑

   用ATmega88PA做红外发射程序时,发现1MHz主频时,T0中断响应时间完全做不到13us,只能到50us左右,不知什么原因?
我的红外发射思路是: 让T0每13us发出一次中断,进而产生38Khz方波驱动IR LED. 并且对13us中断次数进行计数,用于对其它所需的脉冲宽度进行定时,最终产生正确的红外发射时序.
  将M88主频提高到8MHz后,就OK了.但还是想用1MHz主频来工作,不知如何才能让T0中断在1MHz下实现13us响应时间?

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2019-10-15 08:16:20 来自手机 | 显示全部楼层
只要葫芦不要葫芦叶是不对的

出0入442汤圆

发表于 2019-10-15 08:16:40 来自手机 | 显示全部楼层
中断不可能做到那么快。你应该用汇编+nop

出0入50汤圆

发表于 2019-10-15 08:21:07 | 显示全部楼层
1M主频的13uS就是13个机器周期,虽然AVR是大部分指令支持单周期,但是区区13个时钟,要完成进站出站,还有中断跳转和返回,你还要做那么多操作,时间上CPU来不及处理是根本原因,你也说了提高到8M就可以了。

出0入36汤圆

发表于 2019-10-15 08:22:40 | 显示全部楼层
1M主频要做到楼主得要求就算手工汇编优化也几乎不可能

出0入4汤圆

 楼主| 发表于 2019-10-15 08:24:32 | 显示全部楼层
ilikemcu 发表于 2019-10-15 08:21
1M主频的13uS就是13个机器周期,虽然AVR是大部分指令支持单周期,但是区区13个时钟,要完成进站出站,还有 ...

多谢指教,看来我对avr中断响应过程还理解不够.

出0入59汤圆

发表于 2019-10-15 08:52:39 | 显示全部楼层
加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么

出0入0汤圆

发表于 2019-10-15 09:01:08 | 显示全部楼层
ETC 上下高速也要减速了,楼主难为人了哈哈。

出0入4汤圆

 楼主| 发表于 2019-10-15 09:14:30 | 显示全部楼层
polarbear 发表于 2019-10-15 08:52
加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么 ...

这个一定行.但为了硬件尽量简洁,功耗更低才想全部用单片机内部资源来完成.

出0入59汤圆

发表于 2019-10-15 09:55:26 | 显示全部楼层
BS_good200xy 发表于 2019-10-15 09:14
这个一定行.但为了硬件尽量简洁,功耗更低才想全部用单片机内部资源来完成. ...

外加与门调制的话这样做的话功耗更加低吧, 因为CPU 由定时器 硬件产生载波信号, 这样CPU的频率可以用更低因为不用占用CPU的资源去实现载波调制功能;

硬件与门电路其实也不复杂, 用2个三极管,一个NPN 控制GND,   一个PNP控制VCC, 实现载波与调制了;

出0入362汤圆

发表于 2019-10-15 10:08:43 | 显示全部楼层
polarbear 发表于 2019-10-15 09:55
外加与门调制的话这样做的话功耗更加低吧, 因为CPU 由定时器 硬件产生载波信号, 这样CPU的频率可以用更 ...

加一个74LVC1G08呗,更简单了。

出0入0汤圆

发表于 2019-10-15 10:19:34 | 显示全部楼层
本帖最后由 RAMILE 于 2019-10-15 10:20 编辑

这个NC设计,应该用两个定时器,一个生成载波,一个处理脉宽

出0入4汤圆

 楼主| 发表于 2019-10-15 13:02:43 | 显示全部楼层
RAMILE 发表于 2019-10-15 10:19
这个NC设计,应该用两个定时器,一个生成载波,一个处理脉宽

我感觉我的设计思路都会有些怪癖,就是想把软硬件资源及功耗都省到极致

出200入2554汤圆

发表于 2019-10-15 20:27:02 | 显示全部楼层
中断响应时间,在 C 层面上大致受制于中断内的复杂程度:

1. 中断里有整数运算:需要使用寄存器,C进入中断前需要保存寄存器(进栈),会浪费一些时间;

2. 中断里有局部变量:一样需要进栈,会浪费时间;

3. 中断里有浮点运算:咋不上天...

你这个用定时中断的方法,基本上运行路径是确定的,建议改为查询 TOV 标志位的顺序 C 代码,放弃中断;
原因在于后者也是确切的执行路径,并且更加可控(不会后台入栈出栈寄存器)。

出0入4汤圆

 楼主| 发表于 2019-10-16 19:01:26 | 显示全部楼层
t3486784401 发表于 2019-10-15 20:27
中断响应时间,在 C 层面上大致受制于中断内的复杂程度:

1. 中断里有整数运算:需要使用寄存器,C进入中 ...

非常感谢你的指教,授益非浅! 打算用两种方式来改一下程序,争取在AVR 1MHz主频下能正确发送红外时序,并且不另加硬件.
1.不用中断,只用顺序程序实现.
2.用汇编写中断,让主程序调用.

出0入0汤圆

发表于 2019-10-16 19:16:25 | 显示全部楼层
polarbear 发表于 2019-10-15 08:52
加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么 ...

这是正常思路。。。

出0入296汤圆

发表于 2019-10-16 19:27:31 | 显示全部楼层
全用CPU来做而不借助外设,功耗不一定更低。让外设来做事情,CPU能休眠就休眠(或者周期性休眠)才是低功耗的正道。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 13:13

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

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