嵌入式开发第48天(ADC的原理与应用)
2016-09-27 00:47
423 查看
一个鸡肋的ADC?
08年刚出触摸屏的时候,adc原用于电阻式触摸屏复用的。然而刚过半年不到,电容屏推广了,adc成为了一个鸡肋的存在。当然这仅是对开发板而言,实际上ADC又叫模数变换器,用于真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。ADC原理图
ADC的控制寄存器---ADCCON
转换后的数字量---ADCDAT
选择转换通道的寄存器---ADCMUX
ADC的中断清除寄存器
三、ADC的两种工作模式
1、轮询模式当打开ADC转换功能后,ADC就开始转换;我们需要轮询判断ADC转换是否完成,没有完成就等待,完成就读取转换后的数字量。
2、中断模式
当打开ADC转换功能后,ADC就开始转换;当ADC转换完成后,就会产生中断。我们在中断服务程序中,可以读取转换后的数字量。
ADC的中断源和中断号
三、ADC的程序设计
1、轮询的方式设计ADC的程序unsigned short read_adc(int ch)
{
unsigned short adc_data;
//12bits,enable prescaler,devider factor=20,normal,diasable read
ADCCON = (1<<16)|(1<<14)|(19<<6);
ADCMUX = ch;
ADCCON |= (1<<0);//enable adc
while(!(ADCCON & (1<<15)));//wait for
adc_data = ADCDAT & 0xfff;
ADCCON &= ~(1<<14);//disable prescaler
ADCCON |= (1<<2);//standby mode
return adc_data;
}
2、中断的方式设计ADC的程序
int main(void) { int i; uart_init(); for(i=0;i<0x100;i++); printf("\n\r the test of adc on GEC210\n\r"); printf("adc_data = %d\r\n",adc_data); int_init(); intc_setvectaddr(NUM_ADC, adc_isr); //12bits,enable prescaler,devider factor=20,normal,diasable read ADCCON = (1<<16)|(1<<14)|(19<<6); ADCMUX = 0; //channel =0x0 intc_enable(NUM_ADC); ADCCON |= (1<<0);//enable adc while(1) { for(i=0;i<0x200000;i++); ADCCON |= (1<<0);//enable adc } } void adc_isr(void) { adc_data = ADCDAT & 0xfff; printf("adc_data = %d\r\n",adc_data); CLRINTADC0 = 122; intc_clearvectaddr(); }
相关文章推荐
- JavaEE------超链接、重定向、转发
- MySQL之——忘记Root密码如何操作
- 获取VLAN报文
- How to disable 'withcredentials' in HTTP header with node.js and Request package?
- Servlet-web.xml配置模板
- RabbitMQ学习之安装
- Android SQLite数据库的详细使用
- Python新路程(2)代码块区别于其他语言的写法-不使用{}
- jetty 跑 Java Exception:"PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is r
- 2017校招面试【京东、顺丰科技、招银网络科技、去哪儿网】
- 记录:【DIY】一块SSD拯救了我的笔记本
- SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。
- 记安装pip遇到的坑
- SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。
- explicit 构造函数
- Spring-bean的基本配置
- UVa 1611 Crane (思路题)
- Tomcat 8的Connector部分
- 位运算的一些算法
- 层序遍历二叉树的两种方法