一、AD转换基本原理


AD(Analog to Digital) 意思是:模—数转换,它是外部世界模拟信号和计算机之间联系的接口。它将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。


AD转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在AD转换前,输入到AD转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。AD转换后,输出的数字信号可以有8位、10位、12位、14位、16位等。


S3C2410/S3C2440的CMOS模数转换器可以接收8个通道的模拟信号输入,并将它们转换为10位的二进制数据。在2.5MHZ的A/D转换时钟下,最大的转化速率可达500SPS(SPS:samples per secone 每秒采样的次数)。


S3C2410的AD采集的最小量化单位为3.3V/(2^10)=3.222mV,也即当输入最大电压3.3V时,10位数据位为11 1111 1111 (对应十进制是1024),此时对应的电位器阻值为:1024*3.222mV*10^4/3.3≈10KΩ。


二、AD转换相关的寄存器


ADC控制寄存器(ADCCON)


ADC触摸屏控制寄存器(ADCTSC)


ADC启动延时寄存器(ADCDLY)


ADC转换数据寄存器(ADCDATn)


说明:


时钟公式:A/D converter freq. = PCLK/(prescaler+1) = f

                    Conversion time = 1/(f / 5cycles) = 1/200KHz = 5 us


 通过设置ADC控制寄存器ADCCON,ADCCON[14]位启用预分频器,ADCCON[13:6]位配置预分频值prescaler valuef,从而根据公式得到所需时钟频率(A/D converter freq.)。


ADCDATn有ADCDAT0和ADCDAT1两个ADC转换数据寄存器。


ADCDATn为只读。


在触摸屏应用中,ADCDAT0和ADCDAT1保存X和Y位置转换数据。


普通的AD转换,只用ADCDAT0来保存转换后的数据。


启动AD转换,寄存器ADCCON[0]位置置1即可,后加while(ADCCON&0x1);等待成功开启。

等待转换结束,使用while(!(ADCCON&0x8000));即可。

通过寄存器ADCDAT0低10位读取转换结果(ADCDAT0&0x3ff)。


三、AD接口编程一般步骤


1、设置AD是否分频、工作时钟、工作方式


2、选择模拟输入通道


3、启动AD转换


4、等待AD转换结束


5、读取AD转换结果


四、编程实例及代码


从A/D转换器的通道0获取模拟数据,并将转换后的数字量在CRT上打印出来。 


1.定义与A/D转换相关的寄存器。 

#define rADCCON (*(volatile unsigned *)0x58000000) //ADC控制寄存器

#define rADCTSC (*(volatile unsigned *)0x58000004) //ADC触摸屏控制寄存器

#define rADCDLY (*(volatile unsigned *)0x58000008) //ADC启动或间隔延时寄存

#define rADCDAT0 (*(volatile unsigned *)0x5800000c) //ADC转换数据寄存器0

#define rADCDAT1 (*(volatile unsigned *)0x58000010) //ADC转换数据寄存器1

2.对A/D转换器进行初始化。这里的参数ch表示选择的通道号。

void AD_Init(unsigned char ch){

rADCDLY = 100; //ADC启动或间隔延时

rADCTSC = 0; //选择ADC模式

rADCCON = (1<<14)|(49<<6)|(ch<<3)|(0<<2)|(0<<1)|(0); //设置ADC控制寄存器

}

3.获取A/D的转换值。参数ch为选用的通道号。

int Get_AD(unsigned char ch){

int i;

int val=0;

if(ch>7) return 0; //通道不能大于7

for(i=0;i<16;i++){ //为转换准确, 转换16次

rADCCON |= 0x1; //启动 A/D 转换

rADCCON = rADCCON & 0xffc7 | (ch<<3);

while (rADCCON & 0x1); //避免第一个标志出错

while (!(rADCCON & 0x8000)); //避免第二个标志出错

val += (rADCDAT0 & 0x03ff);

Delay(10);

}

return (val>>4); //为转换准确, 除以16取均值

}

4. UART打印A/D的转换值。

 void display_adc(int val)

{

int ch=val;

ch=ch&0x200;ch=ch>>9;sendc(ch);

ch=val;ch=ch&0x100;ch=ch>>8;sendc(ch);

ch=val;ch=ch&0x80;ch=ch>>7;sendc(ch);

ch=val;ch=ch&0x40;ch=ch>>6;sendc(ch);

ch=val;ch=ch&0x20;ch=ch>>5;sendc(ch);

ch=val;ch=ch&0x10;ch=ch>>4;sendc(ch);

ch=val;ch=ch&0x8;ch=ch>>3;sendc(ch);

ch=val;ch=ch&0x4;ch=ch>>2;sendc(ch);

ch=val;ch=ch&0x2;ch=ch>>1;sendc(ch);

ch=val;ch=ch&0x1;sendc(ch);

uart_txd('n');uart_txd('r');

}



5. 主函数

void main(void)

{

uart_init();

AD_Init(0);

while(1)

{

int val;

val=Get_AD(0);

display_adc(val);

}

}


UART相关配置见UART篇

关键字:S3C2410  AD转换  模—数转换 引用地址:S3C2410 普通AD转换

上一篇:S3C2410 UART 发送变量字符
下一篇:mini2440A 裸机编程:串口控制LED灯的亮灭

推荐阅读

概念简述除颤器表明了医疗保健未来的发展方向。这种设备已成为挽救生命的重要技术,但就在几年前,只有医院和救护车才会配备,而且也只有经过专门培训的专业医护人员才会使用。有些人对除颤器的作用还持怀疑态度。想象一下,如果一名同事突然捂住自己的胸口,然后倒在地上,旁边未受过专门培训的员工会怎么做呢?肯定是赶紧跑到柜子边,砸碎玻璃,取出除颤...
只要运用精密运动控制的地方,就有编码器!编码器凭借着可靠、精度高、反应快等特点在越来越多的高精密加工、测量等领域发挥着重要作用。 编码器市场波动,价格谷底徘徊2019年制造业下行压力陡然增加,宏观经济环境不稳定,设备投资需求萎缩,3C、机床、纺织等行业下滑明显,体量庞大的编码器市场也受到整体制造业环境影响,呈现波动起伏的走势,部分市场...
今年秋季,苹果将为我们带来最新的iPhone 12系列机型。根据此前的爆料显示,今年苹果将发布四款iPhone产品,这四部手机采用不同尺寸的屏幕,但硬件配置几乎相同,且均支持5G网络。  近日有外媒爆料称,iPhone 12系列将全系支持5G网络,但仅有iPhone 12 Pro Max这一款机型支持速度最快的mmWave(毫米波)以及普及度较高的Sub-6Ghz,其余三...
随着车载娱乐功能及安全功能增加,以及新能源汽车的日渐普及,汽车电子占整车比重持续上升,2020年估计达到34.3%。这直接推动了汽车PCB板的需求增长。 2020年,受新冠疫情影响,全球汽车销量大幅下滑,导致汽车PCB行业整体规模大幅缩水至62.61亿美元左右。不过,随着疫情逐步好转,全球汽车销量显著增长,同时在ADAS及新能源汽车渗透率节节攀升的情况下,...

史海拾趣

问答坊 | AI 解惑

PID参数如何设定调节(转)

PID参数如何设定调节 PID控制简介   目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。 智能控制的典型实例是模糊全自动洗衣机等。自动控制系 ...…

查看全部问答∨

排阻的测量方法

有谁知道排阻RAP的测量方法```求救```!!…

查看全部问答∨

ChinaEDA--嵌入式Linux操作系统学习规划

嵌入式Linux操作系统学习规划 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) ...…

查看全部问答∨

在VxWorks下如何打印文件

最近在做VxWorks下的打印功能,可是VxWorks不像Windows或Linux那样提供“所见即所得”的GDI函数接口, 所以对于在VxWorks下做可打印和可显示的GDI函数接口一头雾水,无从下手,最近看到了介绍打印机控制语言 PCL和PostScript,感觉里面介绍的东西 ...…

查看全部问答∨

怎样知道菜单

比如,点击 文件 下的 打开  ,我想在点击文件之前,重新生成菜单,我该怎么做啊?谢谢…

查看全部问答∨

版主:STM32外部中断EXTI调试失败

使用万利开发板进行EXTI简单调试:设置PD3,PD4引脚作为中断输入端口,他们分别与板载按键KEY2,KEY3相连。设置好后主程序运行正常,可一旦按下KEY2或KEY3任何一个产生中断信号时,主程序死掉,中断也进不去!! 附EXTI设置源码: *********** ...…

查看全部问答∨

寻wince50驱动开发人员

需要寻求wince50开发人员,有驱动需要开发。有兴趣联系 sigwell@126.com,上海。…

查看全部问答∨

求9B96开发板光盘资料

因光盘不小心遗失,求9B96开发板光盘资料。邮箱wzpstudy@126.com 片子是C3的,例程最好为6288版本的。。。谢谢了 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved