您好,
我正在处理 MSP430FR4133 Launchpad 的 ADC。 我尝试读取单通道在 ADC 通道 A8下工作正常、但当我尝试使用 通道序列 和重复通道序列模式使用 ADCSC 位作为 ADC 采样保持源时、它不工作。我为引脚 NO P8.0提供恒定的0.50 Vdc 分别为 A8和 A7的 P1.7提供了我粘贴在图像中的随机值。由于基准是1.5V 内部 ADC 和10位 ADC、因此我期望大约为342个十进制数。
电路配置为接地短路、常见0.5V 电压通过分压器和一个值为100欧姆和2.2uF 电容的低通 RC 滤波器直接馈入 ADC 通道。
我还尝试了一个分压器阵列、它的输出电压在0到1.25V 之间变化、步长为125mV、使用10步进旋转开关。在这种配置下、我使用单通道、当我获得84~85十进制计数的步长 我要切换旋转开关、它完全正确、但相同的配置不适用于多通道。
下面是我的代码
#include
int ADC_Result [2];//10位 ADC 转换结果数组
unsigned char i;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
//配置 ADC A7~8引脚
SYSCFG2 |= ADCPCTL8 | ADCPCTL7;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//配置 ADC
ADCCTL0 |= ADCSHT_2 | ADCMSC | ADCON;// 16ADCclks、MSC、ADC 打开
ADCCTL1 |= ADCSHP | ADCCONSEQ_1;// ADC 时钟 MODCLK、采样计时器、s/w 三态、单序列
ADCCTL2 |= ADCRES;//10位转换结果
ADCMCTL0 |= ADCINCH_8 | ADCSREF_1;// A7~8 (EOS);Vref=1.5V
ADCIE |= ADCIE0;//启用 ADC 转换完成中断
//配置引用
PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
PMMCTL2 |= INTREFEN;//启用内部基准
_DELAY_CYCLES (400);//基准趋稳延迟
__no_operation();
while (1)
{
I = 1;
while (ADCCTL1和 ADCBUSY);//等待 ADC 内核处于活动状态
ADCCTL0 |= ADCENC | ADCSC;//采样和转换启动
_bis_SR_register (GIE);
__no_operation();//仅用于调试器
_delay_cycles (5000);
__no_operation();
}
}
// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC_vector
_interrupt void ADC_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (ADC_vector))) ADC_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例:
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例:
中断;
ADCIV_ADCLOIFG 案例:
中断;
ADCIV_ADCINIFG 案例:
中断;
ADCIV_ADCIFG 案例:
ADC_RESULSE[i]= ADCMEM0;
if (i ==0)
{
}
其他
{
一----;
}
ADCIFG = 0;
中断;
默认值:
中断;
}
}
这是仅在采样代码更改中出现的相同代码、即我更改了 ADC 通道并删除了 LPM 模式
