TI中文支持网
TI专业的中文技术问题搜集分享网站

请问一下在ADC12的时候如何关闭内部参考源

hi,各位ti的工程师们,请教一下在用adc12的时候调用内部基准源,但是功耗太大,不希望一直开着,如何关闭呢?

REFCTL0|=REFMSTR+REFVSEL_2; 
REFCTL0 &= ~REFON;                  //关闭基准源

感觉只能在初始化中关闭,但是在后面再打开,发现打不开基准源;

REFCTL0 |= REFON;                     //打开基准源,发现不起作用;

我希望每次再调用ADC的时候再打开,不知道可行不?

芯片用的MSP430F5438A

灰小子:

可以这样关闭的。能否提供完整代码?

kanghui zhao:

回复 灰小子:

感谢您的回复:

/*ADC配置*/void ADC_Init(void){ P6SEL |= BIT5; //选择P6.5作为输入; REFCTL0|=REFMSTR+REFVSEL_2; //使能REF管理,内部参考电压选择2.5v、打开内部参考电压 REFCTL0 &= ~REFON;  ADC12CTL0 = ADC12SHT02 + ADC12REF2_5V ; ADC12CTL0 |= ADC12ON; ADC12CTL1 = ADC12SHP; // 采样保持脉冲来自采样定时器 ADC12CTL2 |= ADC12TCOFF ; // 关闭内部内部温度检测以降低功耗,注意或操作否则修改转换精度 ADC12MCTL0= ADC12SREF_1+ADC12INCH_5; //选择参考电压源、现在a5通道 __delay_cycles(75); ADC12CTL0 |= ADC12ENC; // ADC12使能 }

下面我用串口来调试,但是发现要连续输入9E两次才能关闭REF;

#pragma vector=USCI_A1_VECTOR__interrupt void USCI_A1_ISR(void){ char temp; switch(__even_in_range(UCA1IV,4)) { case 0:break; // Vector 0 – no interrupt case 2: // Vector 2 – RXIFG while (!(UCA1IFG&UCTXIFG)); // USCI_A0 TX buffer ready?// UCA1TXBUF = UCA1RXBUF; // TX -> RXed character temp = UCA1RXBUF; if(temp == 0x8E) { REFCTL0 |= REFON; } if(temp == 0x9E ) { REFCTL0 &= ~REFON; } break; case 4:break; // Vector 4 – TXIFG default: break; }}

Ling Zhu2:

回复 kanghui zhao:

 可以关闭啊。再次开启的时候要注意参考源需要一定的稳定时间,不能里面开始测量。

kanghui zhao:

回复 Ling Zhu2:

hi,你好,我刚把上面的代码改了一下,现在一上电功耗是对的,但是我要打开REF打开不了。ADC采集的数据不对,您可以试一下!

kanghui zhao:

回复 Ling Zhu2:

问题已解决,这样就好了:

if(temp == 0x8E) { ADC12CTL0 &= ~ADC12ENC; REFCTL0 |= REFON; ADC12CTL0 |= ADC12ENC; } if(temp == 0x9E ) { ADC12CTL0 &= ~ADC12ENC; REFCTL0 &= ~REFON; }

赞(0)
未经允许不得转载:TI中文支持网 » 请问一下在ADC12的时候如何关闭内部参考源
分享到: 更多 (0)