您尚未登录。

楼主 # 2022-11-21 17:03:20

khalilchen
会员
注册时间: 2022-11-03
已发帖子: 5
积分: 10

中微SC8F6790 ADC使用

#define ADC_Verf (2.0f)

void ADC_Init(void)
{
/ RC0 配置为 模拟输入 /
SET_BIT(TRISA, 0);
SET_BIT(ANSEL0, 0);

/ ADCON0 ***
Bit7~Bit6 ADCS<1:0>: AD转换时钟选择位。
00= FSYS/8
01= FSYS/16
10= FSYS/32
11= F RC (内部振荡器32KHz的时钟)
Bit5~Bit2 CHS<3:0>: 模拟通道选择位。与ADCON1寄存器CHS4组合CHS<3:0>
00000= AN0
00001= AN1
00010= AN2
00011= AN3
…… ……
01101= AN13
01110= OPA0/OPA1输出
01111= 0.6V固定参考电压
10000= AN16
10001= AN17
10010= AN18
10011= AN19
其他= 保留
Bit1 GO/DONE: AD转换状态位。
1= AD转换正在进行。将该位置1启动AD转换。当AD转换完成以后,该位由硬件自动清零。
当GO/DONE位从1变0或ADIF从0变1时,需至少等待两个TAD时间,才能再次启动AD转换。
0= AD转换完成/或不在进行中。
Bit0 ADON: ADC使能位。
1= 使能ADC;
0= 禁止ADC,不消耗工作电流。
*/
// ADCON0 = 0X00; // A0,AD采样时间选为FSYS/8

/ ADCON1 ***
Bit7 ADFM: AD转换结果格式选择位;
1= 右对齐;
0= 左对齐。
Bit6 CHS4 与ADCON0的CHS3~0组合使能
Bit5~Bit3 未用
Bit2 LDO_EN: 内部参考电压使能位。
1= 使能ADC内部LDO参考电压;
当选择内部LDO作参考电压时,ADC最大有效精度为8位。
0= VDD作为ADC参考电压。
Bit1~Bit0 LDO_SEL<1:0>: 参考电压选择位
00= 禁用(注:选择内部LDO作为参考电压时,禁止为00)
01= 2.0V
10= 2.4V
11= 3.0V
*/
ADCON1 = 0x05;
}

float GetGasValue(void)
{
float gas = 0.0f;
uint32_t timeout = 1000;

ADCON0 = 0X03; / 打开通道A0 使能ADC并开启转换 /

while (GET_ADC_CONVER_DONE_FLAG() && timeout--) {
__delay_us(1);
}

if (timeout == 0)
return -1;

gas = (((uint16_t)ADRESH << 4) | (ADRESL >> 4)) * ADC_Verf / 4095;
CLEAR_BIT(ADCON0, 0); / 关闭ADC /

return gas;
}

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发