AD转换 XPT2046

应用电路
应用电路

引脚功能描述
引脚

控制位命令
控制位命令

控制字节各位描述
控制字节

单端模式输入配置
单端模式

差分模式输入配置
差分模式

掉电和内部参考电压选择
掉电和内部参考电压

应用电路
应用电路

AIN0:检测转换电位器模拟信号,控制字命令寄存器值为0x94或者0xB4
AIN1:检测转换热敏电阻模拟信号,控制字命令寄存器值为0xD4
AIN2:要检测转换光敏电阻模拟信号,控制字命令寄存器值为0xA4
AIN3:要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0xE4

数字接口
数字接口

前 8 个时钟用来通过DIN引脚输入控制字节,接着的 12 个时钟周期将完成真正的模数转换,剩下的 3 个多时钟周期将用来完成被转换器忽略的最后字节(DOUT置低)

举例

sbit DOUT = P3 ^ 7;   //输出
sbit CLK  = P3 ^ 6;   //时钟
sbit DIN  = P3 ^ 4;   //输入
sbit CS   = P3 ^ 5;   //片选

void SPI_Write(uchar dat)
{
    uchar i;
    CLK = 0;
    for(i=0; i<8; i++)
    {
        DIN = dat >> 7;     //放置最高位
        dat <<= 1;
        CLK = 0;            //上升沿放置数据

        CLK = 1;
    }
}

uint SPI_Read(void)
{
    uint i, dat = 0;
    CLK = 0;
    for(i = 0; i < 12; i++)     //接收12位数据
    {
        dat <<= 1;

        CLK = 1;
        CLK = 0;

        dat |= DOUT;
    }
    return dat; 
}

uint Read_AD_Data(uchar cmd)
{
    uchar i;
    uint AD_Value;
    CLK = 0;
    CS  = 0;
    SPI_Write(cmd);
    for(i = 6; i > 0; i--);     //延时等待转换结果
    CLK = 1;      //发送一个时钟周期,清除BUSY
    _nop_();
    _nop_();
    CLK = 0;
    _nop_();
    _nop_();
    AD_Value = SPI_Read();
    CS = 1;
    return AD_Value;    
}
posted @   thomas_blog  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示