一则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后再操作吧???
|