打印

没有采集到数据

[复制链接]
779|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2017-8-27 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dc, ADC, AD, ADC1, TI

void main(void)
{

        WDTCTL = WDTPW + WDTHOLD;
        // Stop watchdog timer to prevent time out reset
        if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF)
        {
             while(1);   // If calibration constants erased, trap CPU!!
        }
        // Configure Basic Clock
        BCSCTL1 = CALBC1_8MHZ;     // Set range
        DCOCTL = CALDCO_8MHZ;    // Set DCO step + modulation*/

        ADC10CTL0= ADC10ON+REFON+ADC10SHT_3+MSC+ADC10IE+SREF_1;
        ADC10CTL1= CONSEQ_3+INCH_10;
        ADC10CTL0&=~ADC10IFG;
        
        _EINT();//打开中断
        __delay_cycles(10);
        while(1)
        {
          while (ADC10CTL1 & BUSY);// Wait if ADC10 core is active
          ADC10SA = 0x200;         // Data buffer start
      ADC10CTL0 |= ENC+ADC10SC;//使能转换并且开始转换
      __delay_cycles(1);
      display();
        }
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10ISR(void)
{
        char index=0;
        int i;
        results[index++]=ADC10MEM;
        if(index==NUM)
        {
                unsigned long sum,real;
                index=0;
                for(i=0;i<NUM;i++)
                {
                        sum+=results[i];
                }
                sum>>=5;        //除以32求平均值
                real=((1.5*sum/1023)-0.986)/0.00355;//扩大1000倍
                data_temp[3]=real/1000;                                        //千位
                data_temp[2]=(real%1000)/1000;                        //百位
                data_temp[1]=real%100/10;                                //十位
                data_temp[0]=real%10;                                        //个位
                __delay_cycles(10);
                //display();

        }
        ADC10CTL0&=~ADC10IFG;//清除中断标志
}

相关帖子

沙发
jlyuan|  楼主 | 2017-8-27 14:17 | 只看该作者

while (ADC10CTL1 & BUSY);// Wait if ADC10 core is active
当把这一栏注释掉时
数码管都显示0,没有采集到数据,不知道为什么挂死在这里

使用特权

评论回复
板凳
liliang9554| | 2017-8-27 14:18 | 只看该作者
可以参考如下例程:


//******************************************************************************
//  MSP430F20x2 Demo - ADC10, Sample A1, AVcc Ref, Set P1.0 if > 0.5*AVcc
//
//  Description: A single sample is made on A1 with reference to AVcc.
//  Software sets ADC10SC to start sample and conversion - ADC10SC
//  automatically cleared at EOC. ADC10 internal oscillator times sample (16x)
//  and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC10
//  conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on
//  reti. If A1 > 0.5*AVcc, P1.0 set, else reset.
//
//                MSP430F20x2
//             -----------------
//         /|\|              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//        >---|P1.1/A1      P1.0|-->LED
//
//  L. Westlund
//  Texas Instruments Inc.
//  May 2006
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x20x2.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
  ADC10CTL1 = INCH_1;                       // input A1
  ADC10AE0 |= 0x02;                         // PA.1 ADC option select
  P1DIR |= 0x01;                            // Set P1.0 to output direction

  for (;;)
  {
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
    if (ADC10MEM < 0x1FF)
      P1OUT &= ~0x01;                       // Clear P1.0 LED off
    else
      P1OUT |= 0x01;                        // Set P1.0 LED on
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

使用特权

评论回复
地板
huangchui| | 2017-8-27 14:21 | 只看该作者
输出显示的0应该是初始化的值,很可能是没有AD采样,

使用特权

评论回复
5
zhenykun| | 2017-8-27 14:22 | 只看该作者
你可以单步调试观察一下ADC10MEM的值有没有变化,检查一下触发中断的条件是不是满足

使用特权

评论回复
6
yszong| | 2017-8-27 14:25 | 只看该作者
相当于是等待AD采集转换完成的,若没有完成就执行其他程序了,就进入不到AD采集中断中的。

使用特权

评论回复
7
jlyuan|  楼主 | 2017-8-27 14:27 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

评论回复
8
51xlf| | 2017-8-27 16:36 | 只看该作者
这个是什么芯片的ADC芯片?

使用特权

评论回复
9
i1mcu| | 2017-8-27 16:37 | 只看该作者
adc10工作后通道设置的什么

使用特权

评论回复
10
pmp| | 2017-8-27 16:37 | 只看该作者
多个通道的ADC

使用特权

评论回复
11
mmbs| | 2017-8-27 16:37 | 只看该作者
序列通道都转换完才进入一次中断。

使用特权

评论回复
12
1988020566| | 2017-8-27 16:41 | 只看该作者
要是ADC选择多次转换,转换一轮后进中断

使用特权

评论回复
13
lzbf| | 2017-8-27 16:42 | 只看该作者
可以参阅MSP430英文版的芯片手册,上面寄存器介绍很详细

使用特权

评论回复
14
houjiakai| | 2017-8-27 16:42 | 只看该作者
按照次数每次读取ADCMEM的值后放在一个数组的不同的位置里面的

使用特权

评论回复
15
youtome| | 2017-8-27 16:43 | 只看该作者
是不是硬件有问题

使用特权

评论回复
16
cemaj| | 2017-8-27 16:43 | 只看该作者
是数据为0吗?

使用特权

评论回复
17
51xlf| | 2017-8-27 16:43 | 只看该作者
使用ADC顺序转换吗?

使用特权

评论回复
18
i1mcu| | 2017-8-27 16:43 | 只看该作者
数据都是为0吗?

使用特权

评论回复
19
pmp| | 2017-8-27 16:44 | 只看该作者
ADC选择的是哪个时钟源,还有ADC工作方式是单次采样,还是多次转换。

使用特权

评论回复
20
mmbs| | 2017-8-27 16:44 | 只看该作者
看书上或者文档中ADC工作流程图

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝