一、ADC工作原理
ADC数模转换器,顾名思义,能将模拟信号转换出数字信号。模拟信号最典型的例子就是可调电阻,欧姆定律。
由于数字信号是能被量化的,也就是用多少位进行表示,其最大值与模拟输入最大值成正比。
采样速度。
转换的数字信号最多用10位进行标识,每秒可完成500000次转换,支持电压转换0~3.3V。
- ECFLG:表示A/D是否完成转换(只读)。
- PRSCEN:使用A/D转换预分频器,设置为1。
- PRSCVL:A/D转换预分频器值,设置为49。
- SEL_MUX:模拟信号输入通道选择,设置为。
- STDBM:休眠模式,设置为0。
- READ_START:通过读操作,开启A/D转换。
- ENABLE_START:只有在READ_START为Disable时才有效,设置1开始A/D转换,开始后需要清除该位。
ADCDLY:A/D转换开始延时,即开启A/D转换后,多久才开始正式的A/D转换。
我们用AIN0来测试A/D转换,而AIN0接在外部扩展插座上,我们需要手动焊接排插引脚。
adc.c
#include"../s3c2440_soc.h"
void adc_init(void)
{
ADCCON = (1 << 14) | (49 << 6) | (000 << 3);
ADCDLY = 0xff;
}
int adc_read_ain0(void)
{
//启动ADC
ADCCON |= (1 << 0);
while (!(ADCCON & (1 << 15))); //等待ADC转换结束
return ADCDAT0 & 0x3ff;
}
adc_test.c
#include "adc.h"
void adc_test(void)
{
adc_init();
while (1)
{
int val = adc_read_ain0();
double vol = (double)val / 1023 * 3.3;
int m = (int)vol;
vol = vol - m;
int n = vol * 1000;
printf("vol:%d.%dV\r", m, n);
}
}