历史上的今天
今天是:2024年12月06日(星期五)
2019年12月06日 | AVR开发 Arduino方法(五) 模数转换子系统
2019-12-06 来源:eefocus
模数转换子系统用于将传感器采集的模拟信号转换为数字信号。Arduino UNO R3主处理器ATMega328P的模数转换子系统采用逐次逼近的方式完成模数转换。
使用Arduino库函数进行模数转换十分简单,下面的示例可以将A0引脚上的模拟信号转换为数字信号,并将转换结果打印到串口0上:
1 // ReadAnalogVoltage.ino
2 void setup() {
3 Serial.begin(9600);
4 }
5
6 void loop() {
7 int sensorValue = analogRead(A0);
8 float voltage = sensorValue * (5.0 / 1023.0);
9 Serial.println(voltage);
10 }
与模数转换相关的Arduino库函数有:
analogRead(pin):将指定引脚上的模拟信号转换为数字信号
pin:指定模拟引脚
函数返回转换结果,是一个无符号整数,取值为0~1023
ATMega328P的模数转换子系统由2个相关寄存器控制。模数转换多路选择寄存器ADMUX的结构如下图所示:
REFS1 | REFS0 | ADLAR | MUX3 | MUX2 | MUX1 | MUX0 |
输入通道选择MUX[3:0]位用于指定模拟信号输入的引脚,Arduino UNO R3开发板上有6个模拟信号输入引脚,它们分别是A0~A5,在ANALOG IN组中。
模数转换控制和状态寄存器ADCSRA的结构如下图所示:
ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
向模数转换使能位ADEN写入1则启用模数转换,写入0则禁用;向模数转换启动转换位ADSC写入1则启动模数转换,写入0则不启动;模数转换中断标志位ADIF在被置1时模数转换完成,可以向它写1清0;模数转换预分频选择位ADPS[2:0]用于设置模数转换的时钟源,它的设置如下表所示:
ADPS[2:0] | 时钟源 |
000 | 系统时钟2分频 |
001 | 系统时钟2分频 |
010 | 系统时钟4分频 |
011 | 系统时钟8分频 |
100 | 系统时钟16分频 |
101 | 系统时钟32分频 |
110 | 系统时钟64分频 |
111 | 系统时钟128分频 |
模数转换的结果保存在模数转换数据寄存器ADCH和ADCL中。通过直接访问寄存器改写以上程序为:
1 // ReadAnalogVoltage_reg.ino
2 void setup() {
3 ADMUX = 0x00;
4 ADCSRA |= (1 << ADEN);
5
6 Serial.begin(9600);
7 }
8
9 void loop() {
10 ADCSRA |= (1 << ADSC);
11 while (!(ADCSRA & (1 << ADIF)));
12
13 int sensorValue = (ADCH << 8) | ADCL;
14 float voltage = sensorValue * (5.0 / 1023.0);
15 Serial.println(voltage);
16 ADCSRA |= (1 << ADIF);
17 }
史海拾趣
|
ARM、DSP、FPGA的技术特点和区别是什么? ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32 ...… 查看全部问答> |
|
Altium为澳大利亚的一家为印刷电路板,提供辅助设计软件的软件生产商。旗下EDA产品Protel从1985年的单纯的PCB设计的Dos版 Protel,到09年推出的包含PCB、Cam、FPGA等功能的Summer 09,中间经历了多个版本的升级。就PCB方面的设计而言,Protel每一次 ...… 查看全部问答> |
|
姐妹们,小S代言的“睡睡瘦”也可以免费申领了! 姐妹们,我昨天又有一个大发现,“睡睡瘦”也可以免费申领了。 这可是个货真价实的好东西,小S代言的,我以前买过,睡觉贴上就可以减肥,效果 ...… 查看全部问答> |
|
换新工作,马上要去做 WinCE 开发了,以前还没做过,大家来讨论看看 WinCE(ARM) 平台和 PC 的 Windows 平台上软件开发有什么不同的地方,想听听大家的意见。… 查看全部问答> |
|
一个项目我要测量1000个点,用5V供电会比3V供电更准确吗?5V供电时两个点之间的电压应该更大一些,抗波动强一些.AD采集时我一般都选参考电压基准大的.希望有经验的朋友给予指点.非常感谢!!… 查看全部问答> |
|
在使用三合一的过程中一直很顺利,但是最近做产品小批量测试时出现一个奇怪的现象,三合一与某些目标板连不上,但是与三合一板上的STM8能正常连接。一开始以为是虚焊或其他问题,经多方查找,未能解决。后测量目标板供电,发现电压不超过5.06 ...… 查看全部问答> |




