AD转换 PIC 单片机之AD转换


让我们先看看R1和R2。R2是一个可调电阻器。如果我们让R2变大,引脚RA1上的电压就会变大。R2越小,此引脚RA1上的电压越小。怎么知道电压变化?这需要AD转换。就是把模拟量转换成数字量。

AD转换 PIC 单片机之AD转换


文章图片

如何用单片机表示电压
PIC用十位二进制数表示电压,即0~1023的值表示电压。例如,这个数字是400。这代表什么电压?这是根据参考电压确定的。
例如,我们将正参考电压设置为3.3V,当输入电压为0时,该值为0。当输入电压为3.3V时,数值为1023。如果输入电压为1.2V,代表多少电压?
首先计算3.3V除以1023大约是0.003V多少电压.
那么,1.2V除以0.003V等于400。这表明400代表1.2v。
如下图所示,可以看到AN0~AN7。这些端口可以配置为模拟输入。只有这些引脚可以作为AD转换的端口。

AD转换 PIC 单片机之AD转换


文章图片

示例说明:
例如,如果我们看第一个原理图,从RA0/AN0引脚输入一个模拟量。如果电压大于1.2v,则开启,否则LED熄灭。
广告的设置步骤:
1、设置端口
将RA0端口设为输入TRISA = 0x01;
设置RA0端口模拟ANSELA = 0x01
2.配置模数转换器模块
选择模数转换器的转换时钟。
如何选择转换时钟取决于当前的时钟频率。您可以根据数据表中的表格进行选择。
我们将单片机的时钟频率设置为32MHZ,选择ADC周期时不选择阴影部分。在32MHz这一列,我们随机选择了ADC时钟周期1us,对应的时钟源是Fosc/32。、和ADC

AD转换 PIC 单片机之AD转换


文章图片

配置参考电压
这里,我们将正参考电压配置为电压。Adpref
配置左/右对齐
AD转换后的值是10位二进制,但我们只用8位单片机,所以PIC单片机用两个8位寄存器存储AD值,ADRESH用来存储高位结果,ADRESL用来存储低位结果。但是ADRESH和ADRESL加起来是十六。那么这十个数字怎么放进去呢?这是通过左右对齐来设置的。
如果是右对齐,则低8位放在ADRESL中,其余两位放在ADRESH中。
如果是左对齐,则高八位放在ADRESH中,其余两位放在ADRESL中。见下文

AD转换 PIC 单片机之AD转换


文章图片

我们在这里选择正确的对齐方式,因此ad控制寄存器1的1 ADCON1 = 1

AD转换 PIC 单片机之AD转换


文章图片

以上描述了ADCON1寄存器的配置。先说ADCON0
选择模数转换器输入通道
只有一个AD转换模块,而AD输入通道有八个AN0~AN7。所以不可能同时进行AD转换。我们会根据硬件把AD转换模块分配给AN0。
因此,ADCON0的CHS
打开模数转换器模块
模数转换器模块开启,ADON=1,模数转换器0 = 1,只有模数转换器模块开启。AD转换未启动。如果不使用ADC模块,建议关闭。可以省电!!!

AD转换 PIC 单片机之AD转换


文章图片

3开始AD转换
ADCON0的GO/DONE=1开启AD转换。
4等待AD转换结束
5阅读结果
一般我们不把AD转换的值取一次。而是多次后取平均值。这确保了转换的准确性。有很多地方没有说明为什么要配置ADC模块,因为很多配置其实是相当随机的。没那么绝对。你必须选择哪一个。当然,实际的配置应该基于您的项目需求。

推荐阅读