什么是ADC
CPU只认识数字信号。ADC将外设采集到的模拟信号转换成数字信号给CPU。
模拟信号:
数字信号:
ADC的主要参数
分辨率(精度)
分辨率表示会触发数字量变化的最小模拟信号的变化量。分辨率又称精度,通常以数字信号的位数来表示。ADC的分辨率以输出二进制(或十进制)数的位数表示。
12位的ADC,最大值是每一位为1,即2^12-1,最小值为0,因此ADC的精度是1.8v/2 ^12,因此此ADC理论上能区分2 ^n个不同等级的输入模拟电压。
4412下的ADC控制器
本次实验的目的:测一下滑动变阻器VR1的电压
由DEV的电路原理图可知:滑动变阻器的电压由XadcAIN3
决定,其电压范围是0-1.8v
在Core board上搜索可知:引脚功能单一,因此不用设置引脚功能
PCLK的频率是100MHz
ADC寄存器详解
ADC编程
#include "exynos_4412.h"
int main()
{
unsigned int AdcValue;
/*设置ADC精度为12bit*/
ADCCON = ADCCON | (1 << 16);
/*使能ADC分频器*/
ADCCON = ADCCON | (1 << 14);
/*设置ADC分频值 ADC时钟频率=PLCK/(19+1)=5MHZ ADC转换频率=5MHZ/5=1MHZ*/
ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);
/*关闭待机模式,使能正常模式*/
ADCCON = ADCCON & (~(1 << 2));
/*关闭通过读使能AD转换*/
ADCCON = ADCCON & (~(1 << 1));
/*选择转换通道,3通道*/
ADCMUX = 3;
while(1)
{
/*开始转换*/
ADCCON = ADCCON | 1;
/*等待转换完成*/
while(!(ADCCON & (1 << 15)));
/*读取转换结果*/
AdcValue = ADCDAT & 0xFFF;
/*将结果转换成实际的电压值mv,位数乘以精度*/
AdcValue = AdcValue * 0.44;
/*打印转换结果*/
printf("AdcValue = %dmv\n",AdcValue);
}
return 0;
}