一、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 UART 发送变量字符
下一篇:mini2440A 裸机编程:串口控制LED灯的亮灭
推荐阅读
史海拾趣
近年来,ET Enterprises Ltd公司经历了一系列的收购和战略合作。这些举措不仅进一步增强了公司的实力和市场地位,也为公司的未来发展注入了新的活力。例如,公司成为得克萨斯州Ludlum Measurements Inc.的子公司后,受益于美国光电倍增管生产商ADIT的生产设施和ET Enterprises的开发设施的综合资源,为公司的持续发展提供了有力支持。
以上五个故事概述了ET Enterprises Ltd公司的发展历程和关键阶段,展示了公司在电子行业中不断崛起和持续发展的过程。
1984年,台湾的电子行业正迎来蓬勃发展的黄金时期。在这一年的10月,Bytesonic Corporation在台湾台北正式成立,标志着这家电子公司正式踏入竞争激烈的电子市场。初创时期,公司面临着资金短缺、技术匮乏等多重挑战,但凭借着创始人的远见卓识和团队的拼搏精神,公司逐渐在市场中站稳了脚跟。
为了进一步拓展市场,长工微电子积极寻求战略合作。近期,长工微电子与世强先进(深圳)科技股份有限公司签署战略合作协议,授权世强先进全线代理其旗下电源管理IC、开关转换器、多相控制器、降压电源模块、电子保险丝等产品。这一合作有助于长工微电子更好地满足客户需求,提高市场占有率。
在电子行业快速发展的背景下,全智景公司始终保持着强烈的创新意识和敏锐的市场洞察力。公司不断推出具有创新性的产品和服务,如智能安防监控系统、无人机视觉导航系统等,满足了市场不断变化的需求。同时,全智景公司还积极投入研发资源,探索新兴技术的应用前景,为公司的未来发展储备了更多的技术储备。
为了进一步提升竞争力,APMI开始实施国际化发展战略。公司积极开拓海外市场,与国际知名电子制造商建立合作关系。同时,APMI还加强了与国际同行的技术交流与合作,吸收借鉴先进的管理经验和技术成果。通过国际化发展,APMI不仅拓宽了市场渠道,还提升了公司的国际影响力。
Chesivale Electronics公司深知人才是企业发展的核心动力。因此,公司一直注重人才队伍建设。公司通过校园招聘、社会招聘等多种渠道吸引优秀人才加入,同时建立完善的培训机制和晋升机制,激发员工的积极性和创造力。这些措施使得公司的人才队伍不断壮大,为公司的发展提供了有力的人才保障。
PID参数如何设定调节 PID控制简介 目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。 智能控制的典型实例是模糊全自动洗衣机等。自动控制系 ...… 查看全部问答∨ |
|
嵌入式Linux操作系统学习规划 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) ...… 查看全部问答∨ |
最近在做VxWorks下的打印功能,可是VxWorks不像Windows或Linux那样提供“所见即所得”的GDI函数接口, 所以对于在VxWorks下做可打印和可显示的GDI函数接口一头雾水,无从下手,最近看到了介绍打印机控制语言 PCL和PostScript,感觉里面介绍的东西 ...… 查看全部问答∨ |
使用万利开发板进行EXTI简单调试:设置PD3,PD4引脚作为中断输入端口,他们分别与板载按键KEY2,KEY3相连。设置好后主程序运行正常,可一旦按下KEY2或KEY3任何一个产生中断信号时,主程序死掉,中断也进不去!! 附EXTI设置源码: *********** ...… 查看全部问答∨ |
|