A/D转换器
A/D转换器,又称模/数转换器,顾名思义,就是把模拟信号数字化。
由于系统的实际处理对象往往都是一些模拟量(如温度、压力、位移、图像等),要使计算机或数字仪表能识别和处理这些信号,必须首先将这些模拟信号转换成数字信号,这就必须用到A/D转换器。
A/D转换器的一般步骤
模拟信号进行A/D转换的时候,从启动转换到转换结束输出数字量,需要一定的转换时间,在这个转换时间内,模拟信号要基本保持不变。否则转换精度没有保证,特别当输入信号频率较高时,会赞成很大的转换误差。要防止这种误差的产生,必须在A/D转换开始时将输入信号的电平保持住,而在A/D转换结束后,又能跟踪输入信号的变化。因此,一般的A/D转换过程是通过取样、保持、量化和编码这4个步骤完成的。一般取样和保持主要由采样保持器来完成,而量化编码就由A/D转换器完成。
实例
-
//main.c
-
#include "2410lib.h"
-
externvoid adc_test(void);
-
int main(int argc,char **argv)
-
{
-
sys_init(); // Initial s3c2410's Clock, MMU, Interrupt,Port and UART
-
uart_printf("\n\n Embest S3CEB2410 Evaluation Board\n");
-
while(1)
-
{
-
adc_test();
-
}
-
}
-
//adc.c
-
#include "2410lib.h"
-
#define REQCNT 100
-
#define ADC_FREQ 2500000
-
#define LOOP 10000
-
volatile UINT8T unPreScaler;
-
volatilechar nEndTest;
-
void adc_test(void)
-
{
-
int j;
-
UINT16T usConData;
-
float usEndData;
-
uart_printf("\n Adc Conversion Test Example \n");
-
uart_printf(" ADC_IN Test,channel 2\n");
-
uart_printf(" ADC conv. freq. = %dHz\n",ADC_FREQ);
-
unPreScaler = PCLK/ADC_FREQ -1;
-
rADCCON=(1<<14)|(unPreScaler<<6)|(2<<3)|(0<<2)|(1<<1);//enable prescaler,ain2,normal,start by read
-
uart_printf(" Please adjust AIN2 value!\n");
-
uart_printf(" The results of ADC are:\n");
-
usConData=rADCDAT0&0x3FF;
-
for(j=0;j<20;j++) // sample and show data both by UART and leds
-
{
-
while(!(rADCCON & 0x8000));
-
usConData=rADCDAT0&0x3FF;
-
usEndData=usConData*3.3000/0x3FF;
-
uart_printf(" %0.4f ",usEndData);
-
delay(10000);
-
}
-
uart_printf(" end.\n");
-
}
-
//sys_init.c主要代码
-
void sys_init()
-
{
-
change_clock_divider(1,1); // 1:2:4
-
change_value_MPLL(M_MDIV,M_PDIV,M_SDIV); // Fin=12MHz FCLK=202.8MHz
-
delay(0); // adjust the delay count
-
port_init();
-
beep(1);
-
interrupts_init();
-
uart_init(PCLK, 115200, UART0);
-
uart_init(PCLK, 115200, UART1);
-
#ifdef CLK124_200M
-
change_value_MPLL(88,1,1); // Fin=12MHz FCLK=192MHz
-
uart_init(192000000/4, 115200, UART0);
-
uart_init(192000000/4, 115200, UART1);
-
#endif
-
uart_select(UART0);
-
uart_printf ("\n boot success...\n\n");
-
delay(500);
-
beep(0);
-
}//sys_init