STC8G2K64S4的10路AD采样,两种不同的代码,总有一路AD采样值不对且始终为零
问题如下,两种不同的代码,每次都有固定的一路采样的AD值为零,但为零的如果单独采样则值是正确的代码一如下,其问题是 ADC_N_L1采集的AD值始终为零,其实这个口的外部电压为电源电压一半,单独采样则AD是512
void ADC_ISR() interrupt 5
{
ADC_CONTR &=~ADC_FLAG; //清除中断
if(AD_conver_ii == 0)
{
ADC_ref_avg= (ADC_RES<<8)|ADC_RESL;
Ref_flg =1;
ADC_CONTR = ADC_SELECTCHS0;
}
else if(AD_conver_ii == 1)
{
ADC_TEST= (ADC_RES<<8)|ADC_RESL;
DC5v_flg =1;
ADC_CONTR = ADC_SELECTCHS1;
}
else if(AD_conver_ii == 2)
{
ADC_N_L1= (ADC_RES<<8)|ADC_RESL;
L1N_flg =1;
ADC_CONTR = ADC_SELECTCHS2;
}
else if(AD_conver_ii == 3)
{
ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;
L1L2_flg =1;
ADC_CONTR = ADC_SELECTCHS3;
}
else if(AD_conver_ii == 4)
{
ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;
L1L3_flg =1;
ADC_CONTR = ADC_SELECTCHS4;
}
else if(AD_conver_ii == 5)
{
ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;
Bat_v_flg =1;// 电池电压
ADC_CONTR = ADC_SELECTCHS5;
}
else if(AD_conver_ii == 6)
{
ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;
Bat_i_flg =0;// 充电电流
ADC_CONTR = ADC_SELECTCHS6;
}
else if(AD_conver_ii == 7)
{
ADC_BUS=(ADC_RES<<8)|ADC_RESL;
Vbus_flg =1;// 母线电压
ADC_CONTR = ADC_SELECTCHS7;
}
else if(AD_conver_ii == 8)
{
ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_v_out =1;// 逆变电压
ADC_CONTR = ADC_SELECTCHS13;
}
else
{
ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_i_out =1;//逆变电流
AD_finish =1;
ADC_CONTR = ADC_SELECTINNER;
}
AD_conver_ii =(AD_conver_ii +1)%10;
}
代码二问题是采集的芯片的内部参考信号源1.91V的AD值始终为零
void ADC_ISR() interrupt 5
{
ADC_CONTR &=~0x20; //清除中断
if(AD_conver_ii == 0)
{
ADC_BUS=(ADC_RES<<8)|ADC_RESL; //P16
Vbus_flg =1;// 母线电压
ADC_CONTR = 0xc7;
}
else if(AD_conver_ii == 1)
{
ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_v_out =1;// 逆变电压
ADC_CONTR = 0xc1;
}
else if(AD_conver_ii == 2)
{
AD_L1N= (ADC_RES<<8)|ADC_RESL;
L1N_flg =1;
ADC_CONTR = 0xc2;
}
else if(AD_conver_ii == 3)
{
ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;
L1L2_flg =1;
ADC_CONTR = 0xc3;
}
else if(AD_conver_ii == 4)
{
ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;
L1L3_flg =1;
ADC_CONTR = 0xc4;
}
else if(AD_conver_ii == 5)
{
ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;
Bat_v_flg =1;// 电池电压
ADC_CONTR = 0xc5;
}
else if(AD_conver_ii == 6)
{
ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;
Bat_i_flg =0;// 充电电流
ADC_CONTR = 0xc0;
}
else if(AD_conver_ii == 7)
{
ADC_TEST= (ADC_RES<<8)|ADC_RESL;
DC5v_flg =1;
ADC_CONTR = 0xcf;
}
else if(AD_conver_ii == 8)
{
ADC_ref_avg= (ADC_RES<<8)|ADC_RESL;
Ref_flg =1;
ADC_CONTR = 0xcd;
}
else
{
ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_i_out =1;//逆变电流
AD_finish =1;
ADC_CONTR = 0xc6;
}
AD_conver_ii =(AD_conver_ii +1)%10;
}
AD采取右对齐且MCU的时钟是30MHZAD基本配置如下
ADCCFG = 0x00;
EAXSFR();
ADCTIM = 0xCF;
EAXRAM();
ADCCFG = 0x20;//右对齐
ADC_CONTR = ADC_POWER | AD_INNER;
Delay_T3_nms(100);
ADC_CONTR = ADC_POWER |ADC_START| AD_INNER;//先启动内部信号参考源1.91V
EADC=1;
谢谢!
用附件的例程试试 乘风飞扬 发表于 2023-7-25 13:08
用附件的例程试试
收到 谢谢 乘风飞扬 发表于 2023-7-25 13:08
用附件的例程试试
这个例子是可以的,为什么P1.2没有设置成高阻输入却是AD口?上电复位就是高阻输入?
为什么我的例子却不可以 谢谢! Inver1688 发表于 2023-7-25 14:43
这个例子是可以的,为什么P1.2没有设置成高阻输入却是AD口?上电复位就是高阻输入?
为什么我的例子却不 ...
STC8系列开始,IO口除了P3.0,P3.1外,其它上电默认都是高阻输入模式。 乘风飞扬 发表于 2023-7-25 19:06
STC8系列开始,IO口除了P3.0,P3.1外,其它上电默认都是高阻输入模式。
谢谢
页:
[1]