本帖最后由 xys9190 于 2020-11-1 21:31 编辑
62D 是一个对电压有精准控制能力的MCU ,LVD(低电压检测)、LVR(低电压复位)、ADC(电压检测)。
LVD结构图
LVD:可通过寄存器设定目标电压,超过目标电压LVDOUT置位,否则LVDOUT复位。
LVR:可通过配置页设定低电压复位电压,当电源电压低于目标电压时就会发生复位。
ADC结构图
ADC参考电压可选VDD,4V,3V,2V
ADC输入通道可选择AIN0~AIN10
ADCCLK可选Fcpu/1,Fcpu/2,Fcpu/4,Fcpu/8,Fcpu/16
采样时间可选:1ADCCLK,2ADCCLK,4ADCCLK,8ADCCLK
ADC可选8-12位有效值
***********************************************************************
ADC配置
ADMD = C_ADC_En | C_ADC_CH_En | C_ADC_PB3 ;
ADVREFH = C_Vrefh_2V;
ADR = C_Ckl_Div8;
ADCR = C_Sample_4clk | C_12BIT | C_PB3_AIN8 ;
//ADCR = C_Sample_1clk | C_12BIT;
//PACON = C_PA0_AIN0;
ADMDbits.GCHS = 1;
delay(50); // Delay 0.56ms(Instruction clock=4MHz/2T) for waiting ADC stable
//ADC采样 ,使用查询方式或者ADC的值,在使用之前有必要使用1/4进行ADC数值矫正
if(adcStp == 0)
{
ADMD = 0x90 | C_ADC_PB3; // Select AIN0(PA0) pad as ADC input
//ADMD = 0x90 | C_ADC_PA0;
ADMDbits.START = 1; // Start a ADC conversion session
while(ADMDbits.EOC);
adcStp = 1;
}
else if(adcStp == 1)
{
if(ADMDbits.EOC == 1)
{
adcStp = 0;
adcCnt++;
R_AIN0_DATA_LB += ( 0x0F & ADR);
R_AIN0_DATA += ADD;
if(adcCnt == 8)
{
adcCnt = 0;
R_AIN0_DATA <<= 4; // R_AIN0_DATA shift left 4 bit
//R_AIN0_DATA_LB &= 0xF0; // Only get Bit7~4
R_AIN0_DATA += R_AIN0_DATA_LB; // R_AIN0_DATA + R_AIN0_DATA_LB
R_AIN0_DATA >>=5; // R_AIN0_DATA divided 8
adcVal = R_AIN0_DATA; // output val 0~1024
R_AIN0_DATA = 0;
R_AIN0_DATA_LB = 0;
}
}
}
更多使用上的问题,可以加群讨论,直接加群主QQ提问。
|