主要用来采信四个通道数据 0 差分数据,暂时没调,5 电池电压 6 内部温度传感器,7 偏置
我按我如下程序写:单独通道5 出现的是 38F5 之后一直是8000
通道6 4F50 之后8000
通道7 FFF8 之后都是8000
结果也和我计算出来的不一样,,,而且也只出现 一次值,,不知道哪设置错误,帮忙看下,主要部分
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz 校正数据
DCOCTL = CALDCO_1MHZ; // 校正
BCSCTL1 |= DIVA_0; // ACLK 不分频
BCSCTL2 = 0; // MCLK = SMCLK = default DCO。
WDTCTL = WDT_ADLY_250; // 看门狗配置 选择定时模式,并选时钟源为ACLK,即定时时间为ACLK/32768(WDTISx=0)
IE1 |= WDTIE; // Enable WDT interrupt
/******************************************************************************
函 数:
void Config_SD16(void)
功 能:
基本参数配置
说 明:
2013系列单通道转换,手动切换, 配置公共参数
*******************************************************************************/
void Config_SD16(void)
{
// SD16AE = SD16AE0+SD16AE1; // 模拟输入允许 P1.0 A0+,P1.1 A1-
SD16CTL = SD16SSEL_1 + SD16DIV_1; // SLCK=MCLK=1M 2分频 f=500KHz,OSR=1024,参考电源暂不开启,转换前开,转换后关。节能!
SD16CCTL0 = SD16DF + SD16OSR_1024 + SD16SNGL; // + SD16UNI // 输出格式为2的补码(8000--7FFF)+过采样速率1024+单次转换 双极性模式(默认模式)
SD16INCTL0 = SD16INTDLY_0;// + SD16GAIN_32 + SD16INCH_0; // 中断延时(4第四次采样中断)+增益为x32+通道为0
}
/*******************************************************************************
函 数:
Turn on_Sampling();
功 能:
打开参考电源,并启动AD转换
说 明:
看门狗定时采集数据时打开
*******************************************************************************/
void Turn_on_Sampling(void)
{
//SD16CTL |= (SD16VMIDON + SD16REFON); // 1.2V的参考电源。带缓冲器输出
SD16CTL |= SD16REFON; // 只打开1.2V参考源
Delay_us(100); // 延时 300us 确保电路稳定。延时时间=(5x60+6)x1us=306us(MCLK=1Mhz)。
SD16CCTL0 |=(SD16SC + SD16IE); // 启动 SD16 进行转换并且允许 SD16 中断。
}
/*******************************************************************************
函 数:
Close_Sampling();
功 能:
关闭AD采集及相关电路的电源
说 明:
*******************************************************************************/
void Close_Sampling(void)
{
SD16CCTL0 &= ~(SD16SC + SD16IE); // SD16 停止转换及禁止中断。
//SD16CTL &= ~(SD16VMIDON + SD16REFON); // 关闭参考电压源并且缓冲器禁止。
}
/******************************************************************************
函 数:
void Choose_CH(uchar ch)
功 能:
切换通道,根据通道不同配置不同的AD寄存器配置
说 明:
通道 5, // Vcc 检测供电电压,采样电压为VCC/11,如果VCC<2.2 电量不足,参考电压1.2V,1倍增益
通道 6, // Temperature 检测内部温度传感器(二极管PN结温度)
通道 7, // offset “+”和“-”之间的短路连接,可以用于校准SD16A的输入级补偿。
*******************************************************************************/
void Choose_CH(uchar ch)
{
SD16INCTL0 = SD16INTDLY_0 + SD16GAIN_1 + ch; // nterrupt Delay(4) Gain x1
SD16CCTL0 = SD16DF + SD16OSR_1024 + SD16SNGL; // + SD16UNI // 输出格式为2的补码(8000--7FFF)+过采样速率1024+单次转换 双极性模式(默认模式)
}
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
// Close_Sampling(); // SD16停止转换,禁止中断及关闭采集电路的电源。
adc_last_val= SD16MEM0; // Store value
LPM3; //回到低功耗模式
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
Turn_on_Sampling(); // 接通采集电路的电源启动采集。
LPM3_EXIT; //退出低功耗模式,在AD完成后重新开启
} | |
|