串口模拟I2C读写MCP4728 DAC器件

引言

  本文主要介绍MCP4728 DAC的地址读取及通道电量值的设置。

1、MCP4728 DAC介绍

  MCP4728 是一款 12 位四通道电压输出数模转换器(DAC),具有 非易失性存储器(EEPROM)。其片上精密输出放大器使其能够实现 轨对轨模拟输出摆幅

  • I2C 串行接口:用户可以通过 I2C 串行接口命令将 DAC 输入代码、器件配置位和 I2C 地址位烧写到 非易失性存储器(EEPROM) 中。
  • 非易失性存储器功能:DAC 在断电期间能保持输入代码,设备上电后根据保存的设置立即产生输出。
  • 内部电压基准:具有高精密的内部电压基准 (VREF = 2.048V),并且用户可以为每个通道独立选择使用 内部电压基准外部电压基准(VDD)

2、MCP4728引脚图

MCP4728引脚分布及功能如下图所示
MCP4728引脚图

引脚功能介绍
注:P = 电源, OI = 开漏输入, OO = 开漏输出, ST = 施密特触发输入缓冲, AO = 模拟输出
  1: 此引脚与 VDD 线间需要连接外部上拉电阻。若不使用,则将此引脚悬空。
  2: 此引脚可由单片机驱动。

3、MCP4728寄存器介绍

  下面为MCP4728的寄存器介绍,具体指令和功能请参考芯片手册: MCP4728中文手册
在这里插入图片描述
注  1: 当 LDAC 引脚为 (或改变成)“低电平”时,更新模拟输出。此命令未使用 UDAC 位。
   2: 当 LDAC 引脚或 UDAC 位为 “低电平”时,更新 DAC 输出。
   3: 器件在最后通道的应答时钟脉冲时开始写 EEPROM。器件不执行任何命令直到 RDY/BSY 位重新变成 “高电平”。
   4: 输入和输出寄存器在最后字节的应答时钟脉冲时进行更新。其更新并不需要 LDAC 引脚或 UDAC 位条件。EEPROM 不受
影响。

3、读取MCP4728地址

MCP4728默认器件地址位为 1100A2A1A0(0/1 读/写)
在这里插入图片描述
下面介绍广播查找地址,并附带实现代码。
在这里插入图片描述

  按照顺序操作 :I2C开始–>I2C发送广播地址–>设备应答–>发送器件地址–>设备应答–>I2C重新开始–>发送0xC1 -->设备应答–>获取A0-A2中地址的数据–>设备应答–>I2C停止。
  注:在发送器件地址后需要将LDAC引脚拉低,具体操作可参考代码处理。
  下面为实现代码

//读取MCP4728地址
uint8_t I2cDacReadAddr(void)
{
   
    uint8_t ADDR_Read = 0;
    uint8_t Ack;
    I2C_LDAC_HIGH();           // LDAC 引脚设置为高电平,准备工作
    I2C_Start();               // 启动 I2C 通信
    I2C_WriteByte(0x00);       // 发送器件地址(设备地址 + 写操作位)
    Ack = IIC_Wait_Ack(10);    // 等待应答(10 ms内)
    if (!Ack)
    {
   
        return IICERR_NACK;    // 如果没有收到应答,返回错误码
    }
    I2C_WriteByte(0x0C);       // 发送命令字节
    I2C_LDAC_LOW();            // LDAC 引脚设置为低电平
    Ack = IIC_Wait_Ack(10);    // 等待应答
    if (!Ack)
    {
   
        return IICERR_NACK;    // 如果没有收到应答,返回错误码
    }
    I2C_Start();               // 再次启动 I2C 通信
    I2C_WriteByte(0xC1);       // 发送另一个命令字节
    Ack = IIC_Wait_Ack(10);    // 等待应答
    if (!Ack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值