打印
[技术问答]

SC92F7250 ADC双通道采集问题。

[复制链接]
897|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
q704069352|  楼主 | 2020-7-24 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 q704069352 于 2020-7-24 15:51 编辑

如题,两个通道采集不同的电压,但永远通道0(AIN0)读的对,通道1(AIN1)读不对。
代码如下
uint16_t read_ad(uint8_t channel)
{
    uint16_t ADC_Value;
       
    ADC_FLAG_CLR();
    ADCCON = 0;
    ADCCON = 0x80|channel;
    ADCCFG0 = 0x01 << channel;
    ADCCON |= 0X40;   //开始ADC转换

    ADC_FLAG_DONE(); //等待 ADC转换完成;

    ADC_Value = (ADCVH<<4)+(ADCVL>>4);
    return ADC_Value;
}


使用特权

评论回复

相关帖子

沙发
q704069352|  楼主 | 2020-7-24 15:52 | 只看该作者
麻烦各位大神解惑!

使用特权

评论回复
板凳
q704069352|  楼主 | 2020-7-24 16:46 | 只看该作者
没人遇到过这个问题吗???

使用特权

评论回复
地板
q704069352|  楼主 | 2020-7-24 16:53 | 只看该作者
已解决,两个通道采集最好间隔2S左右(或许可以更早,但是相隔1s不可以),因为是只有一个ADC进行采样。

使用特权

评论回复
5
赛元MCU3| | 2020-7-24 18:26 | 只看该作者
您好,多通道转换后进行多次采集后,将采集的第一个值或前几个值去掉,或者只去掉最大值和最小值,再将剩下的AD值做平均。具体的ADC多通道转换注意事项在“赛元SC92F系列MCU应用指南”中的6.6章节中有详细的说明。

赛元SC92F系列MCU应用指南.pdf

1.47 MB

使用特权

评论回复
6
l4157| | 2020-7-25 09:06 | 只看该作者
本帖最后由 l4157 于 2020-7-25 09:31 编辑

union adc_value{
unsigned int adc_v;
unsigned char v[2];
}ADCvalue;


unsigned int ReadADC(unsigned char ADC_CH){
  
  ADCCON  = (0x80 + ADC_CH);     // Enable ADC,Clear the ADCF,load the adc_chn

  NOP();
  NOP();
  NOP();
  NOP();

  NOP();
  NOP();
  NOP();
  NOP();
   
  ADCCON |= 0x40; //  ADCS =1 ,conversion start
  NOP();
  NOP();
  while(!(ADCCON &0x10));
  ADCvalue.v[0] = ADCVH;
  ADCvalue.v[1] = ADCVL;
  ADCvalue.adc_v >>=4;

    return ADCvalue.adc_v;                 //
}


使用特权

评论回复
7
l4157| | 2020-7-25 09:43 | 只看该作者
本帖最后由 l4157 于 2020-7-25 09:52 编辑

这个写法是有问题的 ADC_Value = (ADCVH<<4)+(ADCVL>>4);
正确的写法是 ADC_Value = ((unsigned int)ADCVH<<4)+(ADCVL>>4);

使用特权

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

本版积分规则

6

主题

18

帖子

0

粉丝