s5pv210——AD转换
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。
参考博客http://www.cnblogs.com/biaohc/p/6286569.html
一、ADC的主要相关概念
1、量程(模拟量输入范围)
(1)AD转换器只能输入电压信号。
- 其他种类的模拟信号要先经过传感器(Sensor)的转换,变成模拟的电压信号。
(2)AD输入端的模拟电压要求有一个范围。
- 一般是0~3.3V或0~5V或者是0~12V等等。
- 模拟电压的范围是AD芯片本身的一个参数。
- 实际工作时给AD的电压信号不能超过这个电压范围。
2、精度(分辨率resolution)
(1)AD转换输出的数字值是有一定的位数的。
- 譬如说10位,意思就是输出的数字值是用10个二进制位来表示的,这种就叫10位AD。这个位数表示转换精度。
- 10位AD,相当于把整个范围分成1024个格子,每个格子之间的间隔就是电压的表示精度。假如AD芯片的量程是0~3.3V,则每个格子代表的电压值是3.3V/1024=0.0032265V。如果此时AD转换后得到的数字量是447,则这个数字量代表的模拟值是:447×0.0032265V=1.44V。
(2)AD的位数越多,则每个格子表示的电压值越小,将来算出来的模拟电压值就越精确。
(3)AD的模拟量程一样的情况下,AD精度位数越多精度越高,测出来的值越准。
- 但是如果AD的量程不一样,譬如2个AD,A的量程是0~50V,B的量程是0~0.5V,A是12位的,B是10位的,可能B的精度比A的还要高。
- A的精度:50/1024=0.04883,B的精度:0.5/4096=0.000122
3、转换速率
(1)AD芯片进行AD转换需要耗费时间。
- 这个时间需要多久,不同的芯片是不一样的;
- 同一颗芯片在配置不一样(譬如说精度配置为10位时时间比精度配置为12位时要小,譬如说有些AD可以配转换时钟,时钟频率高则转换时间短)时转换时间也不一样。
(2)一般数据手册中描述转换速率用的单位是MSPS
- 第一个M是兆,S是sample,就是采样;PS就是per second,总的意思就是兆样本每秒,每秒种转出来多少M个数字值;
(3)AD工作需要一个时钟
- 这个时钟有一个范围,配置时不要超出这个范围。
- AD转换在这个时钟下进行,时钟的频率控制着AD转换的速率。
- 但注意时钟频率和MSPS不是一回事,只是成正比不是完全相等。譬如S5PV210中的AD转换器,MSPS = 时钟频率/5。
4、通道数
- AD芯片有多少路analog input通道,代表了将来可以同时进行多少路模拟信号的输入。
二、s5pv210的ADC控制器
1、S5PV210的ADC控制器
(1)ADC和(电阻式)触摸屏的关系。电阻式触摸屏工作时依赖于AD转换,所以在210的SoC中,电阻触摸屏接口和ADC接口是合二为一的。或者说电阻触摸屏接口复用了ADC的接口。
(2)ADC在210的数据手册的Section10.7;
2、ADC的工作时钟框图
- ADCCLK是ADC控制器工作的时钟,由PCLK_PSYS经过一次分频后得到的;
- PCLK_PSYS时钟总线频率为66MHz,一般设置分频器为65,对用的ADC时钟位1MHz,此时的转换速率为1/200KHz;
- 最大ADC时钟可设置为5MHz,对应的最大转换速率为1MSPS。
3、210的10个ADC通道
(1)注意ADC引脚和GPIO的区别;
- SoC的引脚至少分2种:digit数字引脚和analog模拟引脚。
- 我们以前接触的GPIO都属于数字引脚,ADC channel通道引脚属于模拟引脚。数字引脚和模拟引脚一般是不能混用的
(2)210一共支持10个ADC通道
- 分别叫AIN[0]~AIN[9],分别对应XadcAIN[0]~XadcAIN[9]引脚;
- 理论上可以同时做10路AD转换。
4、210的ADC特性
- 精度10bit/12bit;
- 最大转换速率1MSPS;
- 模拟电压范围0-3.3;
- 可设置普通AD模式(即TOUCH SCREEN触摸屏模式切换为普通AD模式);
5、ADC控制器的主要寄存器
(1)获取ADC数据的方法:轮询检查标志位、中断
- 第一种方式:启动转换,然后循环检查标志位,直到标志位为1,表明转换完毕可以去读取数据。
- 第二种方式:设置好中断,写好中断isr来读取AD转换数据。AD转换完毕后,生成中断信号给CPU,CPU进入中断处理流程。
- 第一种方法是同步的,第二种方式是异步的。
(2)AD转换需要反复进行
- 转换完毕后要立即开启下一次转换,因此需要设计一种机制,能够自动开启下一次转换。
- 这个机制叫start by read,工作方法是:当我们读取本次AD转换的AD值后,硬件自动开启下一次AD转换。
(3)主要寄存器(这里探讨通道n=0)
TSADCCONn寄存器
- bit16设置AD转换精度,10bit、12bit可选;
- bit15只读,状态寄存器,查看是否转换结束;
- bit14预分频器开关,设置为1;
- bit13:6分频倍率,如要设置3.3MHz,可设置为19,66/19+1=3.3,最大设置频率为5MHz,所以此位最小值为13;
- bit2设置为普通模式即可;
- bit1是否开启read star模式,read star模式意思是只要读取AD转换后的寄存器数据,就重新开始AD转换,使用这种模式第一次读数据要丢掉;
- bit0开启AD转换,如果设置了read star模式,此位无效;
TSCONn寄存器:touch screen控制寄存器
TSDATXn寄存器,TSDATYn寄存器:数据寄存器
- bit14查看输出数据位ADC 还是TOUCH SCREEN;
- bit11:0为转换后的数据;
CLRINTADCn寄存器:清中断,写入任意的数值就可以
ADCMUX寄存器:选择当前正在操作的AD通道
三、代码实战
(1)AD控制器初始化;
(2)循环进行AD采样;
(3)start by read模式
- 开启start by read模式,第一次读,然后把第一次读到的数据遗弃,这样就能开启下一次AD转换,从而可以不断地读取AD值。
#define TSADCCON0 0xE1700000
#define TSCON0 0xE1700004
#define TSDATX0 0xE170000C
#define TSDATY0 0xE1700010
#define CLRINTADC0 0xE1700018
#define ADCMUX 0xE170001C#define _REG_TSADCCON0 *(unsigned int*)0xE1700000
#define _REG_TSCON0 *(unsigned int*)0xE1700004
#define _REG_TSDATX0 *(unsigned int*)0xE170000C
#define _REG_TSDATY0 *(unsigned int*)0xE1700010
#define _REG_CLRINTADC0 *(unsigned int*)0xE1700018
#define _REG_ADCMUX *(unsigned int*)0xE170001Cstatic void adc_init(void)
{_REG_TSADCCON0 |= (1 << 16); //设置精度为12bit_REG_TSADCCON0 |= (1 << 14); //使能presaler_REG_TSADCCON0 &= ~(0xFF << 6); //设置时钟_REG_TSADCCON0 |= (65 << 6);_REG_TSADCCON0 &= ~(1 << 2); //standby为normal模式_REG_TSADCCON0 &= ~(1 << 1); //read_start disable_REG_ADCMUX &= ~(0xF << 0); //设置mux开关为ACD1
}
static void delay_1(void){volatile int x, y;for(x=0; x<5000; x++) {for(y=0; y<1000; y++);}
}
void adc_test(void)
{unsigned int valx, valy;adc_init();while(1) {//开始ADC转换_REG_TSADCCON0 |= (1 << 0);//读取状态位,是否转换完毕,如果bit15位0的话,一直读取while (!(_REG_TSADCCON0 & (1 << 15))) {0;}//读取ADC转换后的数据valx = _REG_TSDATX0;valy = _REG_TSDATY0;printf("x:bit14 = %d\n", (valx & (1 << 14)));printf("x:bit11-0 = %d\n", (valx & (0xFFF << 0)));printf("y:bit14 = %d\n", (valy & (1 << 14)));printf("y:bit11-0 = %d\n", (valy & (0xFFF << 0)));delay_1();}
}
s5pv210——AD转换相关推荐
- 单片机ad转换测电压c语言,大家帮我看下这个STC AD转换 测电压程序错在哪里,谢谢了...
大家帮我看下这个STC AD转换 测电压程序错在哪里,谢谢了 [复制链接] #include"ADC电压表.H" #include uchar value; void adc_in ...
- 强交变磁场下的AD转换数值的变化
简 介: 针对无线充电线圈内强磁场的干扰引起单片机电路中测量信号的变化,讨论了产生这种变化的背后的机理.给出了在强信号.高频信号下对于电路设计中的EMC的要求以及想预定的处理方法. 关键词: EMC, ...
- 电压越低采集的ad值反而变大_80多条关于AD转换设计的经验总结
1.如何选择高速模数转换之前的信号调理器件;如何解决多路模数转换的同步问题? ADC之前的信号调理,最根本的原则就是信号调理引起的噪声和误差要在ADC的1个LSB之内.根据这个目的,可以需要选择指标合 ...
- AB1601的AD转换注意事项
AB1601的AD转换输入电阻比较小,只有500K,所以在设计外部电压采样电路时要考虑电阻的阻值.
- 树莓派实现AD转换(pcf8591模块)
一.树莓派启动I2C 使用: ls /dev/命令可以查看I2C设备是启动. 如果没有启动执行 sudo raspi-config选择 interfacing Options->I2C-> ...
- pic1路AD转换c语言,pic单片机的ad转换(实例解析)
描述 AD转换就是模数转换.顾名思义,就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制型.电容阵列逐次比较型及压频变换型.A/D转换器是用来通过一定的电路将模 ...
- ad如何选中当前层上的器件_82条AD转换设计经验总结!
看到一片关于AD转换设计中的基本问题整理博文,特地转载过来和大家共分享. 了解数据转换器错误及参数 1.如何选择高速模数转换之前的信号调理器件;如何解决多路模数转换的同步问题? ADC之前的信号调理, ...
- 单片机模数转换实验c语言程序,单片机实验AD转换实验
<单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...
- AD转换实验 编写程序利用ADC0804 AD转换器采集电位器的模拟电压,将采集到的数字量在程序中换算成实际采集的模拟电压,并用数码管显示所采集的实际模拟电压值。(如:AD转换后的数字量为128,则
编写程序利用ADC0804 AD转换器采集电位器的模拟电压,将采集到的数字量在程序中换算成实际采集的模拟电压,并用数码管显示所采集的实际模拟电压值.(如:AD转换后的数字量为128,则数码管应该显示2 ...
最新文章
- SQLite 使用教程2 语法
- 在局域网可以访问电脑中存放的网页(IIS服务)
- (视频+图文)机器学习入门系列-第15章
- oracle 创建存储过程_Oracle存储过程编程:流程控制选择结构和循环结构总结
- ajax php 返回表单,ajax返回页面session信息(PHP)
- HTML5 canvas 阴影
- P2515 [HAOI2010]软件安装
- 实验二+065+方绎杰
- hive窗口函数最全总结
- 3D动态相册实现代码
- 国民生产总值饼状图_预期寿命和国内生产总值
- Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)
- 使用Godaddy续费我的域名时遇到支付问题
- 火箭军计算机网络技术就业方向,计算机系统结构专业就业方向
- java 判断list是否越界_关于ArrayList的越界问题?
- 安徽省六安市谷歌卫星地图下载
- 屏蔽Backspace(退格)键后退功能
- 【超级完整】北京理工大学计算机复试机试历年真题答案2003年-2018年
- C++扫雷小游戏(基于CMD命令行)
- 二叉树练习:找树根和hz