PIC单片机之AD转换学习记录

这篇具有很好参考价值的文章主要介绍了PIC单片机之AD转换学习记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        首先,简单介绍一下AD原理。ADC是指将模拟信号转换成数字信号的过程。通俗理解ADC采样就是采集电路中的电压,通过数值的方式表现出来。

        以PIC16F877芯片为例,它是10位ADC,供电电压是5V,它能检测的电压也是0~5V(参考电压可以自己修改)。这就好理解了,0~5V电压对应的是0~1024数值。通俗理解为把5V分成了1024份,采集上来多少份占5V的比例。

        采集电压=(采集数值/1024)*5V

8位ad转换代码,学习,单片机

        该MCU的ADC采集精度是10位,参考电压为5V,则采集精度为5/2^10=4.8mV。

内部只有一个ADC,有八个模拟输入通道,需要软件设置选择用哪一路通道进行AD采集,方式为循环检测

一、AD转换相关寄存器介绍

1.AD控制寄存器(ADCON0:各寄存器功能如图。

ADON:AD采集的开关,写0关闭ADC,写1开启ADC。

B1没用到。

GO/DONE(B2):ADON=1时,也就是把AD打开的前提下,该位写0表示AD转换已经完成;该位写1表示AD转换还在进行。

bit3-bit5共同作用,用于选择AD采集的通道。

bit6-bit7共同作用,选择AD采集的时钟和频率,可选择内部时钟或外部时钟,一般情况都选择外部时钟。

8位ad转换代码,学习,单片机

2.ADC控制寄存器ADCON18位ad转换代码,学习,单片机

ADFM:用于设置AD转换结果的存放格式。

PCFG0-PCFG3:AD转换引脚功能选择位。包括AD转换结果的形成方式,RA和RE端口各引脚的初始化设置,也就是选择设置为模拟输入、参考电压输入还是通用IO口的方式。见下图。

比如:PCFG3-PCFG0设置为0000,此时将AN0-AN7都设置为模拟输入,参考电压为MCU的电源VDD和VSS,CHAN/REFS表示有八个通道,有0个可以作为参考电压。PCFG3-PCFG00001的时候,将AN4设置为正参考电压,给AN4输入一个电压值,这个电压值就是参考电压正极。

8位ad转换代码,学习,单片机

3.ADC结果寄存器高位ADRESH

4.ADC结果寄存器低位ADRESL

8位ad转换代码,学习,单片机        用了两个8位的寄存器存放10位的转换结果,ADFM1=1时,将AD转换结果的低八位放到ADRESL里,高两位放到ADRESH里,ADRESH的其余位为0;ADFM1=0时,将AD转换结果的高八位放到ADRESH里,低两位放到ADRESH里,ADRESH的其余位为0;总结就是,如果分辨率只需要8位的话,可以直接从ADRESH里读取八位数据。

三、AD编程方法

要使用好ADC模块,要先在程序中进行初始化设置。这些设置需要包含以下内容:

1.设置ADC模块端口和数据格式

通过控制寄存器ADCON1设置引脚功能为模拟输入信道、参考电压接入方式、通用I/O引脚以及转换结果的存放格式。上面都已介绍。

2.设置ADC模块工作方式

通过控制寄存器ADCON0选中某一条模拟输入信道、设定AD转换时钟源以及开启AD转换功能。

3.如果需要中断功能,需要设置AD中断使能位

清除ADC模块中断标志位ADIF、设置ADC模块中断使能位ADIE=1、设置中断使能PEIE=1和设置全局中断使能位GIE=1.

4.等待所需要的采样时间

采样时间大约是10-20us。影响采样时间的主要因素之一是模拟信号源内阻,信号源的最大阻抗不得超过10K。

5.将控制位GO/DONE置1,开始AD转换

6.等待AD转换完成,可以通过以下两种方法来判断:

方法一:软件循环查询状态位兼控制位GO/DONE是否被硬件自动清0或中断标志位ADIF是否被硬件自动置位。

方法二:等待中断请求。在AD转换完成后,ADIF位被置位,发出中断请求。

7.读取AD转换结果寄存器对ADRESH,ADRESL

如果使用中断标志,需要都ADIF清零。

8.如果需要继续转换,根据实际要求重新从第2步或者第3步开始

在转换完成后,下一次采样开始前,需加入2Tad的等待时间,约是3.2us(Tad为AD每位转换时间)

四、示例代码

         配置ADC的AN4信道采集模拟信号,MCU为PIC16F677。文章来源地址https://www.toymoban.com/news/detail-762957.html

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// 配置字
#pragma config FOSC = XT // 使用外部晶振
#pragma config WDTE = OFF // 禁用看门狗定时器
#pragma config PWRTE = ON // 启用上电复位定时器
#pragma config CP = OFF // 禁用代码保护

#define _XTAL_FREQ 32768 // 外部晶振的频率,单位Hz


void AD_Init();
unsigned int Get_AD_Value();

void main() 
{
    unsigned int ad;  
    AD_Init();
    while(1)
    {
       ad = Get_AD_Value();
    
    }
}


//AD初始化
void AD_Init()
{
    TRISC = 1; // 将C端口设置为输入
    ADCON0 = 0X91; //手册page113  RC0--AN4 数据右对齐
    ADCON1 = 0;
}

//获取AD值
unsigned int Get_AD_Value()
{
    unsigned int adval_16;  //保存数据高八位
    GO_nDONE  =  1; //开启中断
    while(GO_nDONE);//GO_bit=0,AD转换结束,跳出循环
    adval_16 = ADRESH;//高寄存器保存两位,假设是0b00000000 00000011
    adval_16 = adval_16<<8 | ADRESL;//00000011 或|就是加
    return adval_16;
}        

到了这里,关于PIC单片机之AD转换学习记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】15-AD和DA转换

    1.什么是AD转换? A(A,analog,模拟的,D,digital,数字的) 现实世界是模拟的,连续分布的,无法被分成有限份; 计算机世界是数字的,离散分布的,可以被分成有限份的 AD转换就是把一个物理量从模拟的转换成数字的。 2.AD转换的意义 想要计算机来实现现实世界 3.什么情

    2024年02月07日
    浏览(56)
  • 【51单片机】AD模数转换&DA数模转换(江科大)

    · AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 · DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 · AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能 ·

    2024年02月19日
    浏览(52)
  • MCU-51:单片机之AD模数转换与DA数模转换

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了

    2023年04月24日
    浏览(51)
  • 单片机第一季:零基础13——AD和DA转换

    51 单片机系统内部运算时用的全部是数字量,即0 和1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列0 和1 组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多

    2024年02月13日
    浏览(47)
  • PCF8591芯片的AD/DA转换(适用于蓝桥杯单片机)

    目录 1、PCF8591的引脚介绍  2、用IIC发送或接收字节              发送的第一个字节         发送的第二个字节   发送第三个字节     3.发送和接收的字节转换  4.全部代码 IIC部分 接收电压数据 发送电压数据                      在和单片机实际应用中它的

    2024年02月05日
    浏览(48)
  • 51单片机学习笔记AD/DA

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。比如单片机只能识别0与5V数字信号,当输入为2.5V——模拟信号时,就需要转化为单片机所能读取的数字信号。 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号。

    2024年02月09日
    浏览(53)
  • 单片机——C51实验含Proteus仿真(AD转换器(数字电压表),DA转换器(波形发生器))

    分为两部分:AD转换器实现数字电压表,DA转换器实现波形发生器(在仿真部分详细说明) 所用到的原理图:  AD转换器实现数字电压表部分         需要打开main函数中LCD_init(),ADC(),display()三个注释其中电压的输出显示用到了LCD1602关于这部分详情见(96条消息) 单片机——

    2024年02月08日
    浏览(55)
  • 单片机学习笔记---AD/DA工作原理(含运算放大器的工作原理)

    目录 AD/DA介绍 硬件电路模型 硬件电路 运算放大器 DA原理 T型电阻网络DA转换器 PWM型DA转换器 AD原理 逐次逼近型AD转换器 AD/DA性能指标 XPT2046 XPT2046时序 AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。有时候我们也把AD叫做ADC(C是转换器conv

    2024年02月22日
    浏览(51)
  • 51单片机(十六)AD/DA

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月05日
    浏览(50)
  • 【【51单片机AD/DA的分析】】

    模数转换 与 数模转换 运算放大器 DA的转换就是利用运算放大器实现的 输出电压v0=-(D7~D0)/256 x (VrefxRfb)/R D7~D0 就是我们控制的按键看输入多少 然后再划分256份 Vref是我们设置的一个基准电压 PWM 这种类型的方波 完全可以看成是一个交流和直流叠加而成的 回忆一下数电的东西

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包