当前位置: 首页 > article >正文

AD/DA转换(XPT2046)

AD/DA介绍

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号

DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号

AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能。

硬件电路模型

AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率。

AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)

可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道。

硬件电路

• 单独供电

• PCF8591 的操作电压范围2.5V-6V

• 低待机电流

• 通过I²C 总线串行输入/输出

• PCF8591 通过3 个硬件地址引脚寻址

• PCF8591 的采样率由I²C 总线速率决定

• 4 个模拟输入可编程为单端型或差分输入

• 自动增量频道选择

• PCF8591 的模拟电压范围从VSS 到VDD

• PCF8591 内置跟踪保持电路

• 8-bit 逐次逼近A/D 转换器

DA原理

AD原理

AD / DA一般性能指标

XPT2046

XPT2046.c

#include <REGX52.H>
#include <INTRINS.H>

//引脚定义
sbit XPY2046_DIN=P3^4;
sbit XPY2046_CS=P3^5;
sbit XPY2046_DCLK=P3^6;
sbit XPY2046_DOUT=P3^7;

/**
  * @brief  ZPT2046读取AD值
  * @param  Command 命令字,范围:头文件内定义的宏,结尾的数字表示转换的位数
  * @retval AD转换后的数字量,范围:8位为0~255,12位为0~4095
  */
unsigned int XPT2046_ReadAD(unsigned char Command)
{
    unsigned char i;
    unsigned int Data=0;
    XPY2046_DCLK=0; //初始化
    XPY2046_CS=0; //初始化
    for(i=0;i<8;i++)  //循环依次把8位发出去
    {
        XPY2046_DIN=Command&(0x80>>i); //最高位
        XPY2046_DCLK=1;
        XPY2046_DCLK=0;
    }
    for(i=0;i<16;i++)
    {
        XPY2046_DCLK=1;
        XPY2046_DCLK=0;
        if(XPY2046_DOUT){Data|=(0x8000>>i);}
    }
    XPY2046_CS=1;
    return Data>>8;
}

主函数

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"

unsigned int ADValue;

void main(void)
{
    LCD_Init();
    LCD_ShowString(1,1,"ADJ  NTC  GR");
    while(1)
    {
        ADValue=XPT2046_ReadAD(XPT2046_XP);        //读取AIN0,可调电阻
        LCD_ShowNum(2,1,ADValue,3);                //显示AIN0
        ADValue=XPT2046_ReadAD(XPT2046_YP);        //读取AIN1,热敏电阻
        LCD_ShowNum(2,6,ADValue,3);                //显示AIN1
        ADValue=XPT2046_ReadAD(XPT2046_VBAT);    //读取AIN2,光敏电阻
        LCD_ShowNum(2,11,ADValue,3);            //显示AIN2
        Delay(100);
    }
}

#ifndef __XPT2046_H__
#define __XPT2046_H__
//AIN0-AIN3
#define XPT2046_VBAT    0xAC
#define XPT2046_AUX        0xEC
#define XPT2046_XP        0x9C    //0xBC
#define XPT2046_YP        0xDC

unsigned int XPT2046_ReadAD(unsigned char Command);

#endif

http://www.kler.cn/a/3334.html

相关文章:

  • [Unity 热更方案] 使用Addressable进行打包管理, 使用AssetBundle进行包的加载管理.70%跟练
  • 快速排序:一种高效的排序算法
  • Springboot3 自动装配流程与核心文件:imports文件
  • 把网站程序数据上传到服务器的方法和注意事项
  • nginx分发请求超时切换服务
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统
  • [oeasy]python0116_文字的起源_苏美尔文明_楔形文字_两河流域
  • 【数据结构】二叉树及相关习题详解
  • SANGFOR 旧防火墙配置怎么导入新防火墙
  • 【Python】虚拟环境及在VS Code当中的使用
  • 线程池的讲解和实现
  • 图形视图界面 图形效果
  • 【数据结构】树的介绍
  • 用队列实现栈(图示超详解哦)
  • GPT-4发布,这类人才告急,大厂月薪10W+疯抢
  • LeetCode算法 打家劫舍 和 打家劫舍II C++
  • ChatGPT新进展GPT-4 模型介绍
  • 【数据结构与算法】 - 线性表详解 - (带头结点)单链表详细实现思路及代码
  • 基于51单片机的自动打铃打鸣作息报时系统AT89C51数码管三极管时钟电路
  • Week 14
  • C/C++每日一练(20230325)
  • 【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私
  • Oracle-CDC进程同步报错问题合集
  • Android开发工程师想找工作需要掌握哪些
  • Pytorch中的图像增广和预处理方法(transforms类)
  • 快速排序,分治法实际应用(含码源与解析)