打印
[STM8]

STM8S105之ADC多通道转换

[复制链接]
11771|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wazhzlp|  楼主 | 2013-5-20 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我需要采集两路ADC分别在AIN5和AIN3,之前发帖说了采用单次扫描模式。但是在我的板子里AIN0----AIN2都作为IO口输出了。而我们的扫描模式是需要把从AIN0到AIN5进行扫描,然后把数据存储在BUFFER里。所以硬件决定了我们这里不可以这样做。

之后采用单次模式,非扫描模式。这里需要在不同时间对ADC进行通道切换。
这里是初始化函数。
    void ADC_Init(void)
{

ADC1_Cmd(ENABLE);

ADC1_DeInit();
   
/* Init ADC2 peripheral */
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_5, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);

ADC1_DataBufferCmd(DISABLE);

ADC1_Cmd(ENABLE);

/* Enable EOC interrupt */
ADC1_ITConfig(ADC1_IT_EOCIE,ENABLE);
   
}

然后在主函数里开启

main
{
。。。。
    ADC_Init();
    TIM4_INIT();
    enableInterrupts();
    ADC1_StartConversion();

while(1)
{
。。。。
}

}

这里的timer4是用于对ADC进行通道切换。
我们来看tiemer4的初始化:
    void TIM4_INIT(void)
    {
        TIM4_DeInit();
        
        TIM4_TimeBaseInit(TIM4_PRESCALER_1, 500);

        TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
        
        TIM4_Cmd(ENABLE);
      
    }

这里是timer4的中断处理函数。
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
#else /* _RAISONANCE_ */
void TIM4_UPD_OVF_IRQHandler(void) interrupt 23
#endif /* _COSMIC_ */
{
    ADC1_Cmd(ENABLE);   
    TIM4_ClearFlag(TIM4_FLAG_UPDATE);
}


我这里的通道切换时在ADC1中断函数里进行的。

@far @interrupt void ADC1_IRQHandler(void)
#else /* _RAISONANCE_ */
void ADC1_IRQHandler(void) interrupt 22
#endif /* _COSMIC_ */
{

   
ADC1_Cmd(DISABLE);                //关了ADC
ADC1_ClearFlag(ADC1_FLAG_EOC);    //清理标记位

channelcounter++;
if(channel=5)
Conversion_Val =  ADC1_GetConversionValue();
else
XL_CURRETNT    =  ADC1_GetConversionValue();   


if(channelcounter >= 10)
{
ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);
ADC1->CSR |= (uint8_t)(ADC1_CHANNEL_5);
channelcounter=0;
channel=5;
}
else
{

ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);
ADC1->CSR |= (uint8_t)(ADC1_CHANNEL_3);
channel=3;

}

ADC1_Cmd(ENABLE);

  return;

}

我不知道有什么问题,还望大家帮忙看看。

  
沙发
wazhzlp|  楼主 | 2013-5-20 16:08 | 只看该作者
已经改好,犯了低级错误!

使用特权

评论回复
板凳
airwill| | 2013-5-20 16:35 | 只看该作者
以前我也用过单次扫描来处理一下不归并的模拟采样.
但最后发现还是放在一起, 用扫描方式更好.
软件简单, 也避免了采样通道的冲突和时序问题.

使用特权

评论回复
地板
wazhzlp|  楼主 | 2013-5-20 16:57 | 只看该作者
airwill 发表于 2013-5-20 16:35
以前我也用过单次扫描来处理一下不归并的模拟采样.
但最后发现还是放在一起, 用扫描方式更好.
软件简单, 也 ...

但是我这个还是没法用扫描模式来处理。AIN0、AIN1 AIN2用的是GPIO的输出模式,所以没法用扫描模式了。是不是还是可以用扫描模式的?

使用特权

评论回复
5
airwill| | 2013-5-20 17:11 | 只看该作者
wazhzlp 发表于 2013-5-20 16:57
但是我这个还是没法用扫描模式来处理。AIN0、AIN1 AIN2用的是GPIO的输出模式,所以没法用扫描模式了。是 ...

AIN5和AIN3 也可以用扫描

使用特权

评论回复
6
cjhk| | 2013-5-20 20:20 | 只看该作者
ADC采样这一块   如果采样不准确   增加采样频率  同时降低传输波特率   应该会好一点   不知道你是怎么认为的

使用特权

评论回复
7
figo20042005| | 2013-6-15 11:07 | 只看该作者
wazhzlp 发表于 2013-5-20 16:08
已经改好,犯了低级错误!

请问LZ怎么改好的

使用特权

评论回复
8
lige0711| | 2013-10-24 17:04 | 只看该作者
airwill 发表于 2013-5-20 16:35
以前我也用过单次扫描来处理一下不归并的模拟采样.
但最后发现还是放在一起, 用扫描方式更好.
软件简单, 也 ...

您好,多路采样程序怎么写啊,能给个例子吗,非常感谢!!我邮箱LIGE0711@qq.com

使用特权

评论回复
9
zoulinqi110| | 2014-5-22 11:05 | 只看该作者
AIN3没有初始化?

使用特权

评论回复
10
liuyang092| | 2015-10-13 16:57 | 只看该作者
你好 请问你这个多通道转换程序是怎么改好的 最近我也在写这样一个程序 想借鉴参考一下你的程序  谢谢啦  我QQ是675598721

使用特权

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

本版积分规则

13

主题

51

帖子

1

粉丝