模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。 通常的模数转换器是把经过与标准量比较处理后的模拟量转换成以二进制数值表示的离散信号的转换器。 故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。
如图,是把可变电阻上的电压值变换的模拟信号通过ADC转换,输出数字信号。
对于数字信号我们需要得到它的几个属性
*用多少位来存储这个数据(假设10bit)。 *最大值0b111111111 *它对应的电压是多少伏(模拟信号输入的最大值是多少)我们就可以根据模拟信号(电压)的最大值,来计算出对应的数值。 *采样/转换速度。
对于程序员,我们不关心ADC的内部机制,我们只关心:
*怎么启动ADC *启动之后怎么得到数据, 总之:我们都是通过寄存器操作的。
从图1-1-1可以看出ADC有8个多路选择器,显然,以后我们写程序的时候,我们可以8个多路选择之一, 下面是编写程序要做的步骤:
- 确定是哪一路信号:设置8:1MUX,选择要测量哪一个引脚,(看原理图选择要测量的引脚)
- 设置工作时钟(从工作室中,可以算出转换一次,需要多长时间)
- 启动
- 读状态,判断ADC转换是否成功。
- 读数据
1.ADC 控制寄存器(ADCCON)
ADCCON控制寄存器,用于标志转换是否完成,控制是否使能预分频器,输入通道选择,工作模式,ADC是否启动。它的各位含义如下图所示。
2.ADC 启动延时寄存器(ADCDLY)
ADCDLY 启动延时寄存器用于启动或初始化延时寄存器。它的各位含义如下图所示
3.ADC 转换数据寄存器(ADCDAT0)
ADCDAT0转换数据寄存器,本节中只用到该寄存器的前10位(用于保存转换后的结果)。
编程步骤:
- 初始化ADC
- 读数据,
- 在串口上显示出来。
一.初始化ADC
下面的函数实现对ADC的初始化。
03 void adc_init(void)
04 {
05 /* [15] : ECFLG, 1 = End of A/D conversion
06 * [14] : PRSCEN, 1 = A/D converter prescaler enable
07 * [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1)
08 * [5:3] : SEL_MUX, 000 = AIN 0
09 * [2] : STDBM
10 * [0] : 1 = A/D conversion starts and this bit is cleared after the startup.
11 */
12 ADCCON = (1
关注
打赏
- 韦东山freeRTOS系列教程:入门文档教程+进阶视频教程(全部免费的freeRTOS系列教程、freeRTOS学习路线)
- 韦东山嵌入式Linux三大学习路线
- 新人怎样学习嵌入式Linux?
- 【RTOS训练营】作业讲解、队列和环形缓冲区、队列——传输数据、队列——同步任务和晚课提问
- 【RTOS训练营】任务调度(续)、任务礼让、调度总结、队列和晚课提问
- 【RTOS训练营】上节回顾、空闲任务、定时器任务、执行顺序、调度策略和晚课提问
- 【RTOS训练营】设备子系统、晚课学员提问
- 【RTOS训练营】继续程序框架、tick中断补充、预习、课后作业和晚课提问
- 【RTOS训练营】程序框架、预习、课后作业和晚课提问
- 【RTOS训练营】环形缓冲区、AT指令、预习安排和晚课提问