打印

用过430 SD16的朋友请进帮忙看一下为什么我数据采集错误?

[复制链接]
1921|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuyi2576|  楼主 | 2011-1-11 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要用来采信四个通道数据 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完成后重新开启
}
 

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

258

帖子

2

粉丝