microhard567 发表于 2011-11-10 20:59:46

关于对AVRstudio4.18及proteus7.8仿真mega16 AD连续转换模式的实验结果

马老师:关于不用中断时AD连续转换模式,我用AVRstudio和proteus做了仿真实验,并烧到板子上做了硬件测试。
目的:
    测试在连续转换模式下,两种仿真软件与硬件实际运行时的符合情况。
结果:
    发现两种仿真软件对连续转换模式下得仿真与实际不符,主要体现在ADSC位:按手册,AD连续转换模式启动后,不需要人为干预,ADSC一直读出1,这与硬件测试的结果吻合,证明在板子上AD连续转换已经启动运行良好(手册中指出,可通过ADSC是否为1反应AD转换是否工作正常)。但是两种仿真软件在运行中对ADSC位的模拟结果均为:第一次启动后为1,一段很短的时间后为0,以后一直保持为0,
可能的后果:
    如果单纯从软件仿真的结果看,非常容易被误认为AD没有正常工作,前一段时间我就被迷惑了,耽误了很多时间。对高手来说,可能觉得不是什么问题,我的这个测试旨在对没有仿真器或开发板的新手做个提醒,希望有所帮助。
PS:
    这是我第一次做这种测试报告,我是新手,或许我的整个测试是错误的,所以我贴上详细的测试过程和源文件(用CVAVR编写),请老师和高手们检查有没有错误。
以下是测试过程用的程序:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced Automatic Program Generator


Project :free running test(ourAVR)
Date    : 2011/11/9
Author: microhard567
Comments: 演示avr sdudio V4.18 simulater 在模拟连续转换模式
         工作过程方面的缺陷


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 4.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x40


void main(void)
{
// Port A initialization
PORTA=0x00;
DDRA=0x00;

// Port B initialization
//PROTB.6 led->ADSC;PROTB.4 led->ADIF
PORTB=0x00;
DDRB=0xff;

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA5;//interrupt disabled,125.000 kHz
SFIOR&=0x1F; //Free Running mode

PORTB=0x00; //led test
delay_ms(1000);

ADCSRA|=(1<<ADSC);//start 1st AD conversion


while (1)
      {
       PORTB=ADCSRA; //tset ADCSRA
       delay_ms(500);
      }
}
-----------------------------------------------------------------------------
这是studioV4.18SP3的仿真结果:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693922S01T9K.jpg
(原文件名:AVRstudio4.18仿真两分钟之后的结果.jpg)
这是proteusV7.8Professional的仿真结果:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693923HW5UEB.jpg
(原文件名:proteus7.8 professional仿真2分钟后的结果.jpg)

这是硬件测试结果:(我的开发板上LED灯是共阳的)
点击此处打开 ourdev_693928GY7L2F.jpg(文件大小:1.05M,只有400K以内的图片才能直接显示) (原文件名:led灯测试.jpg)
点击此处打开 ourdev_693929VBN8S5.jpg(文件大小:1.05M,只有400K以内的图片才能直接显示) (原文件名:实际硬件测试结果.jpg)
------------------------------------------------------------------------------------------------
以下是测试用到的全部源文件:点击此处下载 ourdev_693930EOPNGD.rar(文件大小:58K) (原文件名:free running test(ourAVR).rar)

microhard567 发表于 2011-11-11 12:25:03

难道大家都觉得没有意义?白忙活了./emotion/em001.gif
刚才逛AVRfreaks论坛无意中发现这样一个帖子:http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=78171&highlight=ad+adsc
里面楼主有这么一句话:“So, I can tentatively say that the clearing of the ADSC bit in free-running mode is a bug in AVR Studio 4's simulator. ”但帖子最终没有对这个问题做出解释。
看来国外友人也发现了这样一个问题啊。

machao 发表于 2011-11-11 16:05:57

有没有意义主要是你自己的体会。
   
    证明软件模拟有BUG,这个对我讲没有意义,因为我知道这些软件不完善,主要用于模拟软件层面上的东西,硬件层面上的许多地方都有问题,也多次建议和倡导初学者不要依赖软件模拟什么的。如果一些基本的东西也要模拟后才能明白,说明基础就比较薄弱,与其忙活学习琢磨模拟器,还比如把基础加强点。
   
    但我觉得这个事情对你应该非常有意义,这个意义在于至少你学会了一些方法,知道以后碰到问题如何能比较快的找出原因,知道自己的差距在哪里。

   我认为,你应该重点是思考我证明ADSC,以及free-running功能正常,只用了10分钟,而你为什么花费这么长的时间才得出一个结论。这里不是说证明模拟有BUG没有意义,重点是你自己的测试证明代码为什么就搞不定?体会到这一点,对你就是有非常大的意义。

liusoldier 发表于 2011-11-11 16:12:42

马上要用到,标记一下。

microhard567 发表于 2011-11-11 16:15:56

嗯,您说的确实在理,我想这就是程序设计的艺术,我会注意在今后的学习中积累,谢谢您的指导。
为了方便大家,我把最近马老师和各位高手对我的帮助贴子放到这里http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5175384&bbs_page_no=1&bbs_id=1003

narcissus8912 发表于 2012-3-29 09:47:12

先标记一下,待细看
页: [1]
查看完整版本: 关于对AVRstudio4.18及proteus7.8仿真mega16 AD连续转换模式的实验结果