搜索
bottom↓
回复: 9

ADC自动触发允许位

[复制链接]

出0入0汤圆

发表于 2008-7-22 01:10:30 | 显示全部楼层 |阅读模式
MEG48的规格书中描述说要先设置ADCSRA的ADATE置位,然后设置ADCSRB
马老师您好!连续转换模式(000)是什么意思。哪些模式不依赖于ADIF.

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-7-22 10:59:10 | 显示全部楼层
不依赖于ADIF,你怎么知道AD转换是否完成呢?

出0入0汤圆

发表于 2008-7-22 17:12:29 | 显示全部楼层
这里你可能概念混淆了。

ADATE = 1,表示使用自动触发的连续转换方式,而这是一个大累,下面具体分成几种,由ADCSRB中ADTS0-2确定:
(000)表示ADC转换完成后,自动开始进行下一此的转换(ADC转换完成就是自动触发信号)
(100)表示由T0的中断作为ADC启动触发信号,每当TO溢出中断,就自动启动一此ADC转换。

而ADIF是表示ADC转换完成了,不管什么工作方式每当ADC转换完成,就置ADIF为1,用户可以查询ADIF,或使用ADIF中断方式读取ADC转换的结果。

需要注意的是,当ADC工作在自动触发的连续转换方式中,你的程序必须及时的读掉转换完成的结果(在下一次ADC转换完成前)。

另外,自动触发的时间间隔应该大于一次ADC转换所需要的时间,否则ADC还没转换完成,又开始启动,前面的数据就做费了,你就得不到正确的ADC转换数据。

实际上,AVR的功能比51强的多,就ADC讲,提供了多种的工作方式,但你的系统必须很好的设计和分配时间,才能做到效率高,性能又好。

出0入0汤圆

 楼主| 发表于 2008-7-22 20:40:38 | 显示全部楼层
谢谢马老师讲解!(1)如果我要单次转换,是不是设置ADCSRA的ADATE位清零,然后启动ADC,查询ADIF,看是否转换完成就行了。
(2)如果我第一次启动的时候是不是要对ADIF写1清中断标志位。后续的是转换完成后由硬件清零。
以下是MEG48规格书的描述:
(1)ADC转换有不同的触发源。设置ADCSRA寄存器的ADC自动触发允许位ADATE可以使能自动触发。设置 ADCSRB 寄存器的 ADC 触发选择位 ADTS 可以选择触发源 ( 见触发源列表中对 ADTS 的描述 )。当所选的触发信号产生上跳沿时, ADC 预分频器复位并开始转换。这提供了一个在固定时间间隔下启动转换的方法。转换结束后即使触发信号仍然存在,也不会启动一次新的转换。如果在转换过程中触发信号中又产生了一个上跳沿,这个上跳沿将被忽略。即使特定的中断被禁止或全局中断使能位为 0,中断标志仍将置位。这样可以在不产生中断的情况下触发一次转换。但是为了在下次中断事件发生时触发新的转换,必须将中断标志清零。
(2)使用ADC中断标志作为触发源,可以在正在进行的转换结束后即开始下一次ADC转换。之后 ADC 便工作在连续转换模式,持续地进行采样并对 ADC 数据寄存器进行更新。第一次转换通过向 ADCSRA 寄存器的 ADSC 写 1 来启动。在此模式下,后续的 ADC 转换不依赖于 ADC 中断标志 ADIF是否置位。
烦请马老师讲一下:
1、文中写到:如果在转换的过程中触发信号中又产生了一个上跳沿,这个上跳沿将被忽略。即使特定的中断被禁止或全局中断使能位为 0,中断标志仍将置位。这样可以在不产生中断的情况下触发一次转换。但是为了在下次中断事件发生时触发新的转换,必须将中断标志清零。是不是说只要启动ADC后,不管全局中断的的使能与否,转换完成后,ADIF都会置位。“文中的可以在不产生中断的情况下触发一次转换”该如何理解.

2、规格书的第二点也就是自动触发模式的000模式,后续的ADC转换不依赖于ADC中断标志ADIF是否置位。那还能查询ADIF来获得转换完成状态吗!

出0入0汤圆

发表于 2008-7-22 21:57:09 | 显示全部楼层
(1)单次转换,只要置ADATE位清零,启动ADC,查询ADIF,看是否转换完成就行了。
(2)第一次启动的时候,最好清一下ADIF标志位。
(3)后续的是转换完成后由硬件清零:如果使用ADC中断的话,进入ADC中断后自动清另。如果软件轮循,需要软件清另。

1、“文中的可以在不产生中断的情况下触发一次转换”。中断产生有3个条件,中断标志位=1,中断允许位=1,全局中断允许位=1。如果中断允许位和全局中断允许位如果有一个不是1,则中断不会产生。但中断标志位仍然会根据条件置1的,一旦置1还是能触发ADC中断的。

2、不知道你看的中文版还是英文版。中文的描述可能在意思上并没有交代的非常清楚。自动触发模式的000模式可以说是由ADIF作为触发启动信号的。因为每次ADC转换完成,ADIF会置“1”的。但实际情况中可能会发生ADIF置1后没有被清另(如没有进入ADC中断,或软件没有去清另),那么下一次ADC完成后,ADIF仍然保持为“1”,没有出现ADIF的“上升沿”触发信号。但此时ADC还是会继续进入下一次转换。所以实际上自动触发模式的000模式,是不需要触发信号的,它只是按ADC规定的时钟连续的做转换,无所谓ADIF是“1”还是“0”。只是当ADC完成后,如果ADIF为“0”时,就把它置“1”。
因此自动触发模式的000模式时,还能可以通过查询ADIF来获得转换完成状态,读取数据的,只不过读到的是前一次的,或正巧是刚刚转换好的。(实际都是前一次的,因为当你读ADC数据时,ADC已经进入了新的一次转换过程了)。

出0入0汤圆

 楼主| 发表于 2008-7-23 19:18:54 | 显示全部楼层
1“文中的可以在不产生中断的情况下触发一次转换”。中断产生有3个条件,中断标志位=1,中断允许位=1,全局中断允许位=1。如果中断允许位和全局中断允许位如果有一个不是1,则中断不会产生。但中断标志位仍然会根据条件置1的,一旦置1还是能触发ADC中断的。 那是不是中断服务程序还是得到执行?

出0入0汤圆

 楼主| 发表于 2008-7-23 19:20:20 | 显示全部楼层
1“文中的可以在不产生中断的情况下触发一次转换”。中断产生有3个条件,中断标志位=1,中断允许位=1,全局中断允许位=1。如果中断允许位和全局中断允许位如果有一个不是1,则中断不会产生。但中断标志位仍然会根据条件置1的,一旦置1还是能触发ADC中断的。 那是不是中断服务程序还是得到执行?

出0入0汤圆

发表于 2008-7-23 19:58:16 | 显示全部楼层
中断标志位是会根据触发条件置1的,但CPU不一定就响应中断的。还是请你把前面基本的东西弄清楚吧。

总不能我把整本书再打上一遍吧。

出0入0汤圆

发表于 2008-7-24 08:48:32 | 显示全部楼层
我觉得马老师说得对,应该先看书,再实践,多做,多想,如果
实在是搞不出来再问,其实很多很多问题通过自己去实践,验证
会想得很清楚的,多做还有一个好处是可以积累很多经验,哪怕
是一个失败的经验都可以积累出很有用的经验!

出0入0汤圆

发表于 2008-7-24 13:02:47 | 显示全部楼层
只是希望从最基本做起,基本和重要的概念必须牢固掌握,才能深入下去学习和实践。

中断的概念和基础非常重要,因此在我的教材中介绍完I/O的输出应用(其目的之一,就是有看到结果的手段。哪怕能点亮一个LED,就可以看结果了),就介绍中断的概念和处理过程了。

“中断标志位置1,和CPU响应中断不是一回事。“中断标志位置1”只是CPU响应中断的条件之一。LZ连基本的中断功能和概念还不清楚,要再理解和掌握后面的东西就困难了。


在课堂上学生有问题,学生可以举手,表示教师“是否”可以(不是“必须”)中断正常讲述过程,来回答问题(中断处理)。老师可以中断正常讲述,回答你的问题(响应中断),也可以不理睬学生的举手,继续自己的正常讲述(不响应中断)。

以上的描述,是面向中小学生解释中断的概念的方法。我已经晕了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 06:25

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

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