MSP430F149 ADC12输出一直是0x0FFF

2019-08-07 16:39发布

本帖最后由 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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
arm菜鸟人
1楼-- · 2019-08-08 14:18
换成 P6.1时,输出一直为0x05EE。结果一直不变。
  1. void ADC12_Init(void)
  2. {
  3. volatile unsigned int i;

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

  6. ADC12CTL0 &= ~ENC;

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

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

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

  12. }

  13. ADC12CTL0 |= ENC; // Enable conversions
  14. }


  15. /****************************************************************************************
  16. 函数名称: ADC12_Convert(void)
  17. 功 能: ADC12 启动函数
  18. 参 数: 无
  19. 返回值 : 无
  20. 说明 :

  21. ****************************************************************************************/
  22. unsigned int ADC12_Convert(void)
  23. {
  24. unsigned int temp = 0;

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

  27. temp = ADC12MEM1;

  28. return temp;
  29. }
复制代码
arm菜鸟人
2楼-- · 2019-08-08 14:50
最新情况,
P6.2的AD结果一直是 00 A7
P6.3的AD结果一直是 08 3B.
arm菜鸟人
3楼-- · 2019-08-08 19:59
  1. void Init_ADC()
  2. {
  3. P6SEL = 0x07;
  4. P6DIR &= ~BIT0;
  5. P6DIR &= ~BIT1;
  6. P6DIR &= ~BIT2;
  7. P6DIR &= ~BIT3;

  8. ADC12CTL0 &= ~(ENC);
  9. ADC12CTL1 |= CSTARTADD_0;

  10. ADC12MCTL0 = INCH_0;
  11. ADC12MCTL1 = INCH_1;
  12. ADC12MCTL2 = INCH_2;
  13. ADC12MCTL3 = INCH_3 + EOS;

  14. ADC12CTL0 |= ADC12ON;
  15. ADC12CTL0 |= MSC;

  16. ADC12CTL1 |= CONSEQ_1;
  17. ADC12CTL1 |= ADC12SSEL_1;
  18. ADC12CTL1 |= ADC12DIV_0;
  19. ADC12CTL1 |= (SHP);

  20. ADC12CTL0 |= ENC;

  21. return;
  22. }

  23. void Init_TimerA()
  24. {
  25. TACTL = TASSEL1 + TACLR;
  26. CCTL0 = CCIE;
  27. CCR0 = 40000;
  28. TACTL |= MC0;
  29. }

  30. #pragma vector = TIMERA0_VECTOR
  31. __interrupt void TimerA_ISR(void)
  32. {
  33. int results[4] = {0};
  34. uchar SendL, SendH;

  35. ADC12CTL0 &= ~ENC;

  36. results[0] = ADC12MEM0;
  37. // ADC12MEM1 = 0x0E0D;

  38. results[1] = ADC12MEM1;
  39. SendL = results[1] % 256;
  40. SendH = results[1] >> 8;
  41. Uart0_Send(SendH);
  42. Uart0_Send(SendL);
  43. Uart0_Send(0xEE);
  44. results[2] = ADC12MEM2;

  45. results[3] = ADC12MEM3;


  46. ADC12MEM1 = 0x0000;
  47. ADC12CTL0 |= ENC + ADC12SC;

  48. }
复制代码
新写了一段定时器触发的程序,这样是否能证明AD挂掉了?
收到的数据 一直是 00 00.
comeon201208
4楼-- · 2019-08-08 21:24
看下你的输入的被采集的信号的是不是超过了你的参考源的吧
arm菜鸟人
5楼-- · 2019-08-09 01:03
 精彩回答 2  元偷偷看……

一周热门 更多>