九齐单片机配置篇—ADC配置
完整配置代码如下,可以根据需要开启ADC中断,每次转换完成可以START一次,此外还有ADC校准模式,此处不做配置,有需求可以参考官方示例去进行校准。DISI();// 关闭总中断ADR = 0X00;// 00 时钟选择十六分频系统时钟,中断标志位与使能位为0// 0000 0000,采样时间一个ADC时钟,八位采样位数,PB根据需要选择为纯ADADVREFH = 0x03 // 0xxx xx
一、ADC简介
ADC 操作顺序
依序设定ADC时钟(ADCLK),ADC采样时间(SHCLK),ADC位数(ADCR),ADC参考电压(寄存器ADVREFH), 选择模拟输入通道并将寄存器PACON相应位设置为 1,再将ADEN位设置为 1。 在ADEN设置为 1 后必须等待 256us(ADC电路启动时间),再将START位写 1 来启动ADC模数转换。ADC转 换尚未完成时,读取EOC位会得到 0。当ADC模数转换完成后会自动将EOC位设置为 1。
二、ADC配置
1.时钟配置
ADR寄存器的ADCK1~0位是时钟选择位,配置这两位的0和1可以选择ADC的时钟,高两位为ADC的中断标志位与中断使能位,可以单独操作,低四位为ADC转换结果低四位数据。
ADR = 0X00; // 00 时钟选择十六分频系统时钟,中断标志位与使能位为0

图1.1 ADR寄存器
2.采样时间与采样位数配置
ADCR寄存器的低四位控制ADC的采样时间与采样位数,高四位为PB引脚的纯ADC模拟输入脚选择位,可以减小功耗,配置时可以根据实际需求一起配置,也可以后面单独操作位来配置0
ADCR = 0xX0; // 0000 0000,采样时间一个ADC时钟,八位采样位数,PB根据需要选择为纯AD

图2.1 ADCR寄存器
3.参考电压配置
ADVREFH寄存器可以配置ADC的电压来源与参考电压大小
ADVREFH = 0x03 // 0xxx xx11,内部参考电压VDD

图3.1 ADVREFH寄存器
4.ADC引脚数模选择配置
PACON寄存器与ADCR寄存器高四位控制所有带ADC功能引脚的纯ADC模拟输入,在引脚充足不复用IO功能时可以选择仅作为ADC模拟输入脚使用,我也建议选择为此模式,特别是有低功耗需求时。
ADCR = 0xX0; // PB根据需要选择为仅作为AD脚
PACON = 0xXX; // PA脚根据实际ADC引脚选择为仅作为AD脚

图4.1 PACON寄存器
5.模式选择
由ADMD寄存器控制,包含选择开启关闭AD功能位,启动转换控制位,总通道开启关闭位,当前通道选择位以及只读位状态位,注意使用时要等待状态位由0变为1才能继续下一次ADC转换操作。
ADMD = 0x10; // 暂时只开启总通道选择PA0位当前通道
ADEN = 1; // 开启ADC功能
delay_ms(1); // 等待1ms(256us以上)
START = 1; // 开始转换
// 可以只配置,在主程序函数中启动转换,转换完成后关闭转换

图5.1 ADMD寄存器
6.提取转换数据
转换数据储存在ADR低四位与ADD寄存器中,共十二位,如果精度选择八位的话,低位自动截断,只读取ADD的值就行了。
ADC_DATA = (u16)ADD <<4 | (ADR & 0x0F); // 高八位左移四位再 或上低四位
//ADC_DATA = ADD;

图6.1 ADD寄存器
三、总结
完整配置代码如下,可以根据需要开启ADC中断,每次转换完成可以START一次,此外还有ADC校准模式,此处不做配置,有需求可以参考官方示例去进行校准。
DISI(); // 关闭总中断
ADR = 0X00; // 00 时钟选择十六分频系统时钟,中断标志位与使能位为0
ADCR = 0xX0; // 0000 0000,采样时间一个ADC时钟,八位采样位数,PB根据需要选择为纯AD
ADVREFH = 0x03 // 0xxx xx11,内部参考电压VDD
PACON = 0xXX; // PA脚根据实际ADC引脚选择为仅作为AD脚
ADMD = 0x10; // 暂时只开启总通道选择PA0位当前通道
ADEN = 1; // 开启ADC功能
delay_ms(1); // 等待1ms(256us以上)
// 需要ADC中断时可以开启
//ADIE = 1; // 开启ADC中断
//ADIF = 0; // ADC标志位初始清0
START = 1; // 开始转换
ENI(); // 开启总中断
更多推荐



所有评论(0)