第一节 S5PV210的ADC S5PV210的ADC可支持10bit和12bit,它支持10路输入,然后将输入的模拟的信号转换为10bit或者12bit的二进制数字信号。 在5MHz的时钟下,最大转换速率是1MSPS。本章只是涉及到初步的ADC转换,并不会讲解触摸屏相关知识,其结构图如下:
 在Mini210S中,adc相关的原理图如下:
通道0的输入被接到可调电阻上,通过调节可调电阻,adc能转换出不同的值。 第二节 程序相关讲解 完整代码见详细代码下载链接。 1. main.c main()函数很简单,主要是调用了adc_test()函数来测试adc,adc_test()的定义位于文件adc.c中。 2. adc.c 函数adc_test()的代码如下: void adc_test(void) { printf("\r\n##################adc test################\r\n"); while(1) { printf("adc = %d\r\n",read_adc(0)); delay(0x100000); } } 通过一个while循环不断的读取通道0经过adc转换的值,核心函数是read_adc(),它主要包括5个步骤: 第一步 设置时钟。 相关代码如下: TSADCCON0 = (1<<16)|(1 << 14) | (65 << 6); 首先使用12bit adc,然后使能分频,最后设置分频系数为66。
第二步 选择通道。 代码如下: ADCMUX = 0; //设置寄存器ADCMUX,选择通道0。 第三步 启动转换。 代码如下: TSADCCON0 |= (1 << 0); while (TSADCCON0 & (1 << 0)); 首先设置寄存器TSADCCON0的bit[0],启动A/D转换,然后读bit[0]以确定转换已经启动。 第四步 检查转换是否完成。 代码如下: while (!(TSADCCON0 & (1 << 15)) ); 读寄存器TsdACCON0的bit[15],当它为1时表示转换结束。 第五步 读数据。 代码如下: return (TsdATX0 & 0xfff); 由于我们使用的12bit的模式,所以只读寄存器TsdATX0的前12bit。 第三节 实验现象 串口终端上会不断的打印出数字,数字的范围是0~4095,这是因为我们使用的是12bit的ADC。 我们通过调节可变电阻可以改变ACD转换值。效果如下:
详细代码下载链接:http://download.csdn.net/detail/klcf0220/6045033 作者:快乐出发0220 ;Android群1:176507146 ;Android群2:151319601 ; Linux群:96394158 ; 个人博客:http://funsay.sinaapp.com ; 微信公众号:funsay ;
转载请注明出处 http://klcf0220.cnblogs.com/ !!!
|