大家好、
我现在正在使用 ADC14创建一个项目、但 AD 结果似乎是错误的值。
这些是代码、
我已经设置了 ADC 输入通道的 P8SEL0和 P8SEL1。
unsigned long AD_Converter(unsigned short channel) { unsigned long temp; unsigned short loop; temp=0; for(loop=0;loop<100;loop++) { __enable_irq(); NVIC->ISER[0] |= 1 << ((ADC14_IRQn) & 31); //Enable ADC interrupt in NVIC module ADC14->CTL0 = ADC14_CTL0_SHT0_2 | ADC14_CTL0_SHP | ADC14_CTL0_ON; // Sampling time, S&H=16, ADC14 on ADC14->CTL1 = ADC14_CTL1_RES_3; // Use sampling timer, 14-bit conversion results switch(channel) { case Base: ADC14->MCTL[0] |= ADC14_MCTLN_INCH_21; // A21 ADC input select; Vref=AVCC break; case Back: ADC14->MCTL[0] |= ADC14_MCTLN_INCH_20; // A20 ADC input select; Vref=AVCC break; case Leg: ADC14->MCTL[0] |= ADC14_MCTLN_INCH_19; // A19 ADC input select; Vref=AVCC break; } ADC14->IER0 |= ADC14_IER0_IE0; // Enable ADC conv complete interrupt ADC_Flag=0; ADC14->CTL0 |= ADC14_CTL0_ENC | ADC14_CTL0_SC; // Start sampling/conversion while(ADC_Flag==0); // Use sampling timer, 14-bit conversion results temp+=ADC14->MEM[0]; } temp=temp/100; return temp; } void ADC14_IRQHandler(void) { ADC_Flag=1; ADC14->IER0 &= ~ADC14_IER0_IE0; // Disable ADC conv complete interrupt }
原理图布线是一个15K 欧姆电阻器和一个连接到3V3电源和 GND 的 VR。
使用 ADC14将模拟信号传输到数字信号。
我不更改 VR、但我得到了 ADC 结果的差值。
甚至我在 ADC 输入通道和 GND 之间添加一个电容。
我使用仪表测量 ADC 通道的电压、电压值相同。
下图是 CCS 调试环境的屏幕截图。
我没有调整 VR、电压值也没有改变、但我得到了差分 AD 结果。
如何解决问题?
我的代码是否有任何错误?
BR、
Yu-Chuan、Chen