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.

4305438A同过ADC采集外部电池电压的问题



我现在正在用5438A这个芯片,通用ADC的通道,基准电压设为AVCC采集数据都是正常的。但是我打算用VREF+为基准(外部内部均可),然后采集通道11即(AVCC-AVSS)/2就不行了。采集的数据一直都是4095.不知道电路上有啥要求没。我的电路连接是AVCC电池的正极(1.5V到3V可调);AVSS接地;VREF+接10UF;和100nf的电容到地(引脚悬空)。主频晶振为25M的。VREF+如果悬空采集的数据都是4095,VREF+如果外接3V的电压倒是能采集到不同的数据,但是数值并不正确。

程序如下:

 

  • 程序如下:

    void ADC_init(void)//
    { int i;
      
      P6SEL |= 0x01;    //P60,单通道;
      REFCTL0 |= REFMSTR+REFTCOFF+REFVSEL_2+REFON+REFOUT;////开启REF模块+选2.5V+选择内部参考电压+关闭温度传感器

    ADC12CTL0&= ~ADC12ENC;//ENC=0;

      ADC12CTL0 = ADC12ON+ADC12SHT0_4+ADC12MSC+ADC12REFON+ADC12REF2_5V;//;+ADC12SHT1_8 $$$ //开ADC12+采样保持时间+自动采样
                                                            //ADC12REFON+ADC12REF2_5V:基准开启,用2.5V
      ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; //;ADC12采样/保持脉冲模式:选择信号从“采样定时器”+  ADC12转换顺序选择:2     

      ADC12MCTL0 =ADC12SREF0+ADC12INCH_11;//

      for ( i=0; i<0x30; i++); //
      ADC12IE =ADC12IE0;// 0x01; //    //A0转换结束允许中断。  
      ADC12CTL0 |= ADC12ENC;    //ADC12-A;使能转换。                
      ADC12CTL0 |= ADC12SC;     //ADC12-A启动采样

    }

    #pragma vector=ADC12_VECTOR//ADC GFY 
    __interrupt void ADC12ISR (void)
    { unsigned int voltage;

      switch(__even_in_range(ADC12IV,34))
      {
      case  6:                                  //   ADC12IFG0
       
        voltage=ADC12MEM0;    
        
      LCD_PutChar(voltage);//显示转换值
           
      default: break; 

        }
     
    }

  • 大家没有遇到过这个问题的吗?