This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430G2553的ADC10的问题

我最近在调试G2553的ADC10,准备调试多个通道的ADC,但是有2个问题想咨询下:

1、 当2553进入低功耗模式后,可以用ADC的中断唤醒吗?怎么唤醒?是只要触发中断就唤醒还是ADC有变化的时候唤醒呢?低功耗模式下ADC还开放吗?

2、ADC中我选择了0           序列通道单次转换模式,是不是意味着从我设置的最高的通道依次进行ADC的转换呢?是每一个通道转换结束后进入一次ADC中断,读取ADC的结果呢?还是全部转换完成后再次读取结果呢?当完成一个序列的ADC转换后,是不是再从头开始转换啊??

这是我的2个问题,希望工程师们给解答下!!

  • fifasanguo,多看看书吧孩子。书中都有答案的。你要先搞明白低功耗怎么回事,ADC如何工作。

    问题一:要看你进入的是低功耗哪个模式,ADC选择的是哪个时钟源,还有ADC工作方式是单次采样,还是多次转换。如果ADC选择的时钟源在选择的低功耗模式下没有关闭,ADC选择的是多次转换,那么ADC转换一轮完成后就进入中断。如果ADC选择的时钟源在选择的低功耗模式下没有关闭,ADC选择的是单次转换,那么还得保证ADC转换启动操作不受低功耗影响,才能保证ADC在此低功耗下正常运行。ADC没有自动识别采集信号变化的功能,

    问题二:看书上或者文档中ADC工作流程图,序列通道都转换完才进入一次中断。从TI的例程也可以看出了。

  •       首先感谢你回复了我的帖子!!!

    先说下关于书的问题吧,我看书了,也从网上下了例程了,但是430的书不多,有几本还是说的是ADC12的,虽然ADC12和ADC10差不多,还是有差别的,尤其是关于其中的寄存器的配置没有很详细的说明。

    1、要是ADC选择多次转换,转换一轮后进中断,那怎么读数值啊,我知道ADC10只有一个寄存器“ADCMEN”,不像ADC12有好多“ADCMEM0、ADCMEM1等”;

    2、关于低功耗的问题我只是问下吧,现在还没有调试到哪儿,ADC肯定是要工作的,我只是问下设置那种低功耗,可以用ADC的中断退出低功耗状态的;

    另外就是我已经调试出来单次采样和单次重复采样了,就是序列通道采样不行,我觉得我的关键是进入中断后读值哪儿有问题?我认为是没执行一遍ADC后触发一次中断,读值后再顺序执行下一个ADC的。

    中断程序:

                   ADCdata【u】 = ADCMEM;

                  u--;

                 if(u==0)

                 {

                        u=7;

                 }

  • 呵呵。没有合适的书,可以参阅MSP430英文版的芯片手册,上面寄存器介绍很详细。对于AD10来讲如你所说只有一个AD10MEM,它是每个通道转换完毕后都进入一次中断的。进入一次读取一次AD值对应每个通道,直到A0转换完成后,才完成一个循环的AD转换。至于AD值所对应的通道可以通过特征值用程序判断比如A8~A11通道的值都有特点

    最近几年一直没用ADC10,上次回答忽略了,不好意思。呵呵发表

  • 这都不是事。主要是我的英文水平实在有限啊,现在问题的关键是我开了序列通道后,进入ADC中断怎么读取ADCMEM的值,我是按照次数每次读取ADCMEM的值后放在一个数组的不同的位置里面的,但是好像不行啊,我在看看吧,我发现有个属性存储的寄存器“ADC10DTC0”,我准用下他了。

  • 首先,你的提问和你的回答说明你确实没有好好的看书,至少没有好好看芯片的数据手册,甚至是adc10的相关寄存器。

    其次,你说的英语问题,不要求你现在再恶补它,但是专业的几个英语,很少的量完全可以搞定,就像很多人说的电脑都是英文,英文不好,学不了,现在不是大家都用的挺好的么?你不用看详细的介绍,只要看相关寄存器,拿个字典,我觉得完全可以解决你的疑问。

    第三,要用心的钻进去,才能理解技术的本质,如果仅仅是流于表面的东西,那你永远不可能会使用他。

    所以,你再努力一下,一定可以解决问题!我原来的经验,碰到问题后习惯性的向供应商的技术支持寻求解决,可是自己又急着解决问题,就在他们没有回答之前自己努力去解决,最后发现他们回复时我的问题大都已经解决,很多时候他们回答的内容不能解决我们的实际问题。

    这就是我对你的问题的看法,和推荐的解决办法。

  •         我很郁闷,为啥我发个疑问不去解答,反而给我上课呢,英文的资料我也在看,但毕竟不如看中文的理解的透彻,至于英文不好,这确实是个事实,我怎么没有看数据手册啊,我可以给你看看我看了多少版本的有关于ADC10的资料吗?甚至我连ADC12的资料都看了好几个版本了,我只是在调试的过程中发到论坛看有没有朋友遇见这个问题,调试成功过,我可以少走点弯路,叫你们这么一说我成了一不学无术的不良少年了!!!!

           再说这不是TI的技术论坛吗?有问题还不能问了吗???

           无语......................

  • 教你一个简单的方法:

    1、开通ADC10的DTC功能;

    2、设置DTC的起始地址为0x200,

    3、在程序的起始位置声明几个变量(int),有几个通道声明几个。

    4、在一次多通道转换以后,那几个变量的值就是刚刚转换的结构。

    5、注意:多通道转换时从高通道开始到底通道结束,所以上面声明的变量最前面的是高通道的转换值。

  • adc中断唤醒?你的clk哪里来?你可以用定时器进行间歇唤醒,然后进行adc采样。