2046|3

1668

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

一则CH548/CH549例程ADC程序的bug解决 [复制链接]

 

用官方例程测量外部电压,使用的AIN1通道,也就是P1.1引脚。外部使用2个电阻分压输入到P1.1引脚。实测发现电压大于实际电压,4V电压分压后应该是2V左右,用万用表量确有2.6V。

以为电阻错了,检查后没有问题。

怀疑单片机引脚使能了上拉。查看了WCH例程发现了问题。


#define  CH0                            0
#define  CH1                            1
#define  CH2                            2
#define  CH3                            3
……

ADC_ChSelect(CH1);


/*******************************************************************************
* Function Name  : ADC_ChSelect
* Description    : ADC 外部通道选择
* Input          : UINT8 ch
                   ch, 位域 0~15bit分别对应外部16通道
* Output         : None
* Return         : None
*******************************************************************************/
void ADC_ChSelect( UINT8 ch )
{
    ADC_CHAN = (ADC_CHAN & ~MASK_ADC_CHAN) | ch;
    if(ch<=7)                                  //P10~P17引脚配置,不用每次都设置
    {
        P1_MOD_OC &= ~(ch&0xFF);                       //高阻输入
        P1_DIR_PU &= ~(ch&0xFF);
    }
    if(ch>7 && ch<=0x0f)                                  //P00~P07引脚配置,不用每次都设置
    {
        P0_MOD_OC &= ~((ch-7)&0xFF);                  //高阻输入
        P0_DIR_PU &= ~((ch-7)&0xFF);
    }
}

官方库的选择通道配置的是高阻输入,但当通道1参数进来时实际上是将P1.0配置成了高阻输入,而产非P1.1。
P1_MOD_OC = 0xfe;                       
P1_DIR_PU= 0xfe;

看了手册引脚上电默认是准双向带上拉模式。

因此这个应该是1<<ch后再操作吧???

最新回复

感谢作者无私的分享。非常精彩的内容,学习了,受益匪浅。非常感谢。  详情 回复 发表于 2024-10-7 12:26
点赞 关注
 
 

回复
举报

1668

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

解决办法也很简单,这样定义下就好了

如下:

//通道号选择,分别对应P1.0~P1.7, P0.0~P0.7
#define  CH0                            0x0001
#define  CH1                            0x0002
#define  CH2                            0x0004
#define  CH3                            0x0008
#define  CH4                            0x0010
#define  CH5                            0x0020
#define  CH6                            0x0040
#define  CH7                            0x0080
#define  CH8                            0x0100
#define  CH9                            0x0200
#define  CH10                           0x0400
#define  CH11                           0x0800
#define  CH12                           0x1000
#define  CH13                           0x2000
#define  CH14                           0x4000
#define  CH15                           0x8000
#define  CHALL                          0xFFFF
 

 
 
 

回复

9716

帖子

24

TA的资源

版主

板凳
 

刚刚看了官方的代码,好像确实像你说的这样,应该设置对应的位来选择对应的通道。

官方的代码使用的是0~16,如果是这样,如果输出参数是3,这时实际测量的数据应该是通道1和2的轮询值吗?

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

59

帖子

5

TA的资源

禁止发言

4
 
感谢作者无私的分享。非常精彩的内容,学习了,受益匪浅。非常感谢。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表