打印

MSP430F149 ADC12输出一直是0x0FFF

[复制链接]
1578|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 arm菜鸟人 于 2013-12-10 16:47 编辑

使用MSP430F149ADC12,输出一直是0x0FFF。很郁闷,大家帮找茬,看问题出在哪里。不胜感激。
void ADC12_Init(void)
{
    volatile unsigned int i;
   
    P6SEL |= 0x01;                            // Enable A/D channel A0
    P6DIR &= ~BIT0;  // 设置P6.0为输入
   
    ADC12CTL0 &= ~ENC;
   
    ADC12CTL0 = ADC12ON+SHT0_2+REFON+REF2_5V; // Turn on and set up ADC12
    ADC12CTL1 = SHP;                          // Use sampling timer
   
    ADC12MCTL1 = SREF_1 + INCH_0;             // Vr+=Vref+
   
    for ( i=0; i<0x3600; i++)                 // Delay for reference start-up
    {
   
    }
   
    ADC12CTL0 |= ENC;                         // Enable conversions
}

/****************************************************************************************
函数名称: ADC12_Convert(void)
功    能: ADC12 启动函数
参    数: 无
返回值  : 无
说明    :
****************************************************************************************/
unsigned int ADC12_Convert(void)
{
    unsigned int temp = 0;
   
    ADC12CTL0 |= ADC12SC;     // ADC12SC 启动模式
   while ((ADC12IFG & BIT0) == 0);    // 等待ADC 完成

   
    temp = ADC12MEM0;                                            
   
    return temp;
}

相关帖子

沙发
arm菜鸟人|  楼主 | 2013-12-9 16:02 | 只看该作者
程序完全是官方例程。

只不过把开启语句单独列为一个函数。

使用特权

评论回复
板凳
arm菜鸟人|  楼主 | 2013-12-9 16:04 | 只看该作者
这是串口调试的截图。发送 03 01 0D 采集指令,启动AD转换。0xxx0 0xxx1(AD数据) 0xAA(帧结束符)

11.jpg (95.53 KB )

11.jpg

使用特权

评论回复
地板
arm菜鸟人|  楼主 | 2013-12-9 16:07 | 只看该作者
还有一个重要线索,把AD输入调节为0V,输出仍然是0X0FFF

使用特权

评论回复
5
dirtwillfly| | 2013-12-9 22:28 | 只看该作者
楼主,你的电路有没有问题?

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
arm菜鸟人 + 4 赞一个!
6
arm菜鸟人|  楼主 | 2013-12-10 09:07 | 只看该作者
dirtwillfly 发表于 2013-12-9 22:28
楼主,你的电路有没有问题?

开发板。应该没问题。
不过不知道AD有没有挂掉。
我换到P6.1试试。

使用特权

评论回复
7
arm菜鸟人|  楼主 | 2013-12-10 11:35 | 只看该作者
换到 P6.1 也输出同样的结果。

使用特权

评论回复
8
arm菜鸟人|  楼主 | 2013-12-10 17:21 | 只看该作者
换成 P6.1时,输出一直为0x05EE。结果一直不变。
void ADC12_Init(void)
{
volatile unsigned int i;

P6SEL |= 0x02; // Enable A/D channel A0
P6DIR &= ~BIT1; // 设置P6.0为输入

ADC12CTL0 &= ~ENC;

ADC12CTL0 = ADC12ON+SHT0_2+REFON+REF2_5V; // Turn on and set up ADC12
ADC12CTL1 = SHP; // Use sampling timer

ADC12MCTL1 = SREF_1 + INCH_1; // Vr+=Vref+

for ( i=0; i<0x3600; i++) // Delay for reference start-up
{

}

ADC12CTL0 |= ENC; // Enable conversions
}


/****************************************************************************************
函数名称: ADC12_Convert(void)
功 能: ADC12 启动函数
参 数: 无
返回值 : 无
说明 :

****************************************************************************************/
unsigned int ADC12_Convert(void)
{
unsigned int temp = 0;

ADC12CTL0 |= ADC12SC; // ADC12SC 启动模式
while ((ADC12IFG & BIT0) == 0); // 等待ADC 完成

temp = ADC12MEM1;

return temp;
}

11.jpg (54.97 KB )

11.jpg

使用特权

评论回复
9
arm菜鸟人|  楼主 | 2013-12-10 19:08 | 只看该作者
最新情况,
P6.2的AD结果一直是 00 A7
P6.3的AD结果一直是 08 3B.

使用特权

评论回复
10
arm菜鸟人|  楼主 | 2013-12-10 19:17 | 只看该作者
void Init_ADC()
{
P6SEL = 0x07;
P6DIR &= ~BIT0;
P6DIR &= ~BIT1;
P6DIR &= ~BIT2;
P6DIR &= ~BIT3;

ADC12CTL0 &= ~(ENC);
ADC12CTL1 |= CSTARTADD_0;

ADC12MCTL0 = INCH_0;
ADC12MCTL1 = INCH_1;
ADC12MCTL2 = INCH_2;
ADC12MCTL3 = INCH_3 + EOS;

ADC12CTL0 |= ADC12ON;
ADC12CTL0 |= MSC;

ADC12CTL1 |= CONSEQ_1;
ADC12CTL1 |= ADC12SSEL_1;
ADC12CTL1 |= ADC12DIV_0;
ADC12CTL1 |= (SHP);

ADC12CTL0 |= ENC;

return;
}

void Init_TimerA()
{
TACTL = TASSEL1 + TACLR;
CCTL0 = CCIE;
CCR0 = 40000;
TACTL |= MC0;
}

#pragma vector = TIMERA0_VECTOR
__interrupt void TimerA_ISR(void)
{
int results[4] = {0};
uchar SendL, SendH;

ADC12CTL0 &= ~ENC;

results[0] = ADC12MEM0;
// ADC12MEM1 = 0x0E0D;

results[1] = ADC12MEM1;
SendL = results[1] % 256;
SendH = results[1] >> 8;
Uart0_Send(SendH);
Uart0_Send(SendL);
Uart0_Send(0xEE);
results[2] = ADC12MEM2;

results[3] = ADC12MEM3;


ADC12MEM1 = 0x0000;
ADC12CTL0 |= ENC + ADC12SC;

}

新写了一段定时器触发的程序,这样是否能证明AD挂掉了?
收到的数据 一直是 00 00.

AD结果.jpg (73.52 KB )

AD结果.jpg

使用特权

评论回复
11
comeon201208| | 2013-12-12 00:15 | 只看该作者
看下你的输入的被采集的信号的是不是超过了你的参考源的吧

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
arm菜鸟人 + 2
12
arm菜鸟人|  楼主 | 2013-12-12 11:59 | 只看该作者
comeon201208 发表于 2013-12-12 00:15
看下你的输入的被采集的信号的是不是超过了你的参考源的吧

一般情况是这样的。
不过我将输入调到0了,还是输出0x0FFF。
实际上是AD挂掉了。

使用特权

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

本版积分规则

个人签名:感染属性。

34

主题

539

帖子

1

粉丝