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() { 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 -; rADCCON=(<<)|(unPreScaler<<)|(<<)|(<<)|(<<);//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=;j<;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(); } uart_printf(" end.\n"); } //sys_init.c主要代码 void sys_init() { change_clock_divider(,); // 1:2:4 change_value_MPLL(M_MDIV,M_PDIV,M_SDIV); // Fin=12MHz FCLK=202.8MHz delay(); // adjust the delay count port_init(); beep(); interrupts_init(); uart_init(PCLK, , UART0); uart_init(PCLK, , UART1); #ifdef CLK124_200M change_value_MPLL(,,); // Fin=12MHz FCLK=192MHz uart_init(/, , UART0); uart_init(/, , UART1); #endif uart_select(UART0); uart_printf ("\n boot success...\n\n"); delay(); beep(); }//sys_init