好的!IIC(或 I²C,Inter-Integrated Circuit)接口的 AD转换(模数转换) 涉及如何使用 I²C 通信协议与集成了 ADC(模数转换器)功能的芯片进行通信,读取模拟信号并将其转换为数字值。
以下是使用 I²C ADC 进行转换的关键步骤和概念(用中文解释):
-
硬件连接:
- SDA (Serial Data): 连接主控器(如MCU)的 SDA 引脚与 ADC 芯片的 SDA 引脚。这是双向数据线,用于传输配置指令和读取转换结果。
- SCL (Serial Clock): 连接主控器的 SCL 引脚与 ADC 芯片的 SCL 引脚。这是由主控器产生的时钟信号,用于同步数据传输。
- VCC/GND: 连接电源和地。
- 参考电压 (Vref): 大多数 ADC 需要一个稳定的参考电压(Vref)来定义其转换的满量程范围。这通常连接到专用 Vref 引脚。
- 模拟输入 (AINx): 将要测量的模拟信号(如来自传感器的电压)连接到 ADC 芯片的模拟输入引脚(如 AIN0, AIN1 等)。
- 地址选择引脚 (A0, A1, A2): 许多 I²C ADC 芯片有 1-3 个地址选择引脚。通过将它们连接到 GND 或 VCC,可以设置该芯片在 I²C 总线上的唯一器件地址(通常为 7 位),允许多个相同芯片共享同一总线。
- 上拉电阻: SDA 和 SCL 线必须各连接一个上拉电阻(通常在 2.2KΩ 到 10KΩ 之间)到电源 VCC。这是 I²C 总线正常工作的必要条件。
-
I²C 通信基础:
- 主从结构: I²C 总线有一个主设备(通常是你的微控制器 MCU)和一个或多个从设备(这里是 ADC 芯片)。主设备控制时钟(SCL)并启动所有通信。
- 器件地址: 每次通信开始时,主设备会发送一个7位(或10位,较少见)的从设备地址,后跟一个读写位。
- 如果读写位是
0(写),主设备要向从设备写数据(发送配置命令)。 - 如果读写位是
1(读),主设备准备从从设备读取数据(获取转换结果)。
- 如果读写位是
- 起始 (S) / 停止 (P) 条件:
SDA在SCL高电平时从高变低表示 START 条件;SDA在SCL高电平时从低变高表示 STOP 条件。它们标志一次通信的开始和结束。 - 数据位 & ACK/NACK: 数据在 SCL 低电平时变化,在 SCL 高电平时保持稳定并被采样。每传输完8位数据(一个字节),接收方(无论是主还是从)必须在第 9 个时钟脉冲期间拉低 SDA 发送一个 ACK (Acknowledge) 信号表示成功接收。如果未拉低(保持高),则是 NACK (Not Acknowledge),通常表示接收失败或通信结束。主设备发送停止位前读取最后一个字节通常会发送 NACK。
-
ADC 转换流程(典型步骤):
- 步骤 1: 发送 START 条件 (MCU) - 启动通信。
- 步骤 2: 发送从设备地址 + 写位 (MCU -> ADC) - 告诉 ADC 芯片“我现在要给你写配置命令了”。地址格式通常为
(7位地址 << 1) | 0。 - 步骤 3: 等待/接收 ACK (ADC -> MCU) - ADC 确认收到地址。
- 步骤 4: 发送配置寄存器指针/命令 (MCU -> ADC) - 告诉 ADC 你要配置哪个寄存器(通常是告诉它使用哪个模拟输入通道、设置增益、转换模式等)。具体命令格式需查阅该 ADC 芯片的数据手册。
- 步骤 5: 等待/接收 ACK (ADC -> MCU) - ADC 确认收到配置数据。
- 步骤 6: (可选) 发送更多配置字节 (MCU -> ADC) - 如果需要配置多个寄存器值。
- 步骤 7: 发送 STOP 条件 (MCU) - (单次转换模式) 如果配置为单次转换模式,发送 STOP 条件会触发 ADC 开始一次转换。或者...
- 步骤 7/8: 发送重复 START 条件 (MCU) / 等待转换完成 (ADC) - (查询结果) 配置后,如果需要查询转换是否完成(例如通过读状态寄存器),或直接等待足够时间(根据数据手册中的转换时间计算),然后发重复 START 准备读取结果。
- 步骤 8/9: 发送从设备地址 + 读位 (MCU -> ADC) - 告诉 ADC 芯片“我现在要读取转换结果了”。地址格式通常为
(7位地址 << 1) | 1。 - 步骤 9/10: 等待/接收 ACK (ADC -> MCU) - ADC 确认收到读请求。
- 步骤 10/11: 读取结果数据字节 (ADC -> MCU) - 主设备产生时钟脉冲,ADC 在 SDA 线上依次输出转换结果的数据位(通常是 2 个字节,高位在前或低位在前取决于芯片,需查手册)。主设备在读取每个字节后发送 ACK(最后一个字节前)或 NACK(最后一个字节后)。
- 例如读取 16 位结果:
- 读第一个字节 (MSB) -> 主发 ACK
- 读第二个字节 (LSB) -> 主发 NACK
- 例如读取 16 位结果:
- 步骤 11/12: 发送 STOP 条件 (MCU) - 结束读取操作。
(注意:步骤 7 和后续步骤的触发方式取决于 ADC 芯片的工作模式(单次转换、连续转换)以及是否需要等待转换完成标志。有些芯片在发出读命令后会自动返回最新转换结果,有些则需要先触发转换再读取。务必查阅具体芯片手册!)
-
关键概念:
- 转换分辨率: ADC 将模拟输入范围(通常是 0V 到 Vref)划分为多少个离散数字值。常见的有 8位 (256)、10位 (1024)、12位 (4096)、16位 (65536) 等。位数越高,理论上精度越高。
- 采样率: ADC 每秒能完成多少次完整的采样和转换。受 I²C 总线速度和 ADC 本身转换时间限制。
- 输入通道选择: 配置 ADC 使用哪个具体的模拟输入引脚 (AIN0, AIN1...) 进行转换。
- 增益 (PGA): 有些 ADC 内部有可编程增益放大器,可以放大微弱的输入信号再转换。
- 转换模式:
- 单次转换 (Single Shot):主控制器主动触发一次转换,读取结果后结束。功耗较低。
- 连续转换 (Continuous):ADC 自动连续进行转换,主控制器可以随时读取最新的结果。速度较快,但功耗较高。
- 数据格式: 转换结果是二进制原码、二进制补码,还是其他格式(如差分信号的正负数表示)。
总结:
使用 I²C 接口的 ADC 进行 AD 转换,本质上是你的主控制器(MCU)通过 I²C 总线向 ADC 芯片写入配置命令(选择通道、模式等),然后(直接或稍后)再通过 I²C 总线从 ADC 芯片读取转换得到的数字值。整个过程严格遵循 I²C 协议的时序规则(START, 地址+R/W, 数据字节+ACK/NACK, STOP)。成功的关键在于:
- 正确的硬件连接: 特别是 SDA/SCL 的上拉电阻!
- 准确的器件地址: 包含地址选择引脚的正确设置。
- 严格按照芯片数据手册的寄存器配置流程和时序要求编程。
- 正确解析读取到的数据字节(顺序、格式、符号位等)。
务必查阅你使用的具体 ADC 芯片型号的官方数据手册 (Datasheet),里面会详细说明其 I²C 地址、寄存器映射、配置命令格式、转换时间、数据格式和所有操作时序图。
有关AXI IIC和PS IIC的自调试技巧
AXI IIC 和 PS IIC 控制器都符合 NXP IIC 总线规范。用户必须确保其选择使用的从设备的时序参数与UM10204 的第 48 页上的“表 10”中的参数相同。
2022-08-25 10:29:08
从实测的IIC波形入手,带你看到真实的IIC样子
实际上,上面和中间是同样的SDA线,这里只是分开示意。因为IIC应答是一种相互关系,单片机发数据给IIC器件,IIC器件要进行应答,表示收到了数据,同样,单片机接收IIC器件的数据后,也要给IIC器件一个应答
2022-08-25 10:31:58
IIC总线具有哪些特点
IIC总线IIC总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。IIC通信多用于板内通信。PCF8591与A/D转换PCF8591是具有IIC接口的8位A/D和D/A转换芯片,具有
小芳
2021-12-09 07:40:31
IIC总线双向电平转换电路的工作原理
在IIC主从设备连接时,需要考虑主从设备的电平情况,常规的主要有3种:5V、3.3V、1.8V,如果电平相同,那么就直接连接;若电平不同,一个高电平是5V,另一个是3.3V,那么就需要做一下电平转换,即接入MOS管。
2023-03-16 17:42:33
FPGA实现IIC协议的设计
今天给大家带来的是IIC通信,IIC协议应用非常广泛,例如与MPU6050进行通信,配置OV5640摄像头、驱动OLED屏幕等等,都需要使用到IIC协议,所以掌握它是非常必要的,废话不多说,接着往下看。
2024-03-04 10:49:32
模拟iic和硬件iic区别
模拟iic和硬件iic区别 I2C是一种相对于另一种通信协议SPI(Serial Peripheral Interface)更高层次的通讯协议,也称为I2C总线。I2C
2023-09-19 16:50:05
IIC的使用
IIC的使用IIC相关IIC开始/结束 信号IIC数据有效性(位传输)IIC响应信号IIC写数据地址控制字写操作协议示例IIC读数据示例IIC相关IIC开始/结束 信号开始和停止时序,如上图
四川赵赵
2022-01-07 08:29:06
振弦采集模块的通讯协议( IIC)
振弦采集模块的通讯协议( IIC) IIC 通讯协议本身即是基于设备地址和寄存器的物理层通讯协议, VMXXX 使用 IIC 接口对传感器的访问,请遵循前述硬件接口时序及协议说明即可。 振弦采集模块
2022-11-17 10:02:45
软件IIC和硬件IIC
代码我放github了,还有字库软件。可直接运行。这里写目录标题IIC介绍协议起始结束等待应答字节写封装成写命令和写数据再次封装驱动OLEDGPIO初始化OLED初始化主函数展示IIC介绍IIC:两
a2009428
2021-08-12 06:54:28
基于zynq的IIC驱动的内容和机制
本文主要介绍基于zynq的IIC的驱动架构,通过代码编写来深入了解IIC驱动的内容和机制。 1. IIC驱动架构 IIC驱动包含两部分:IIC总线驱动和设备驱动。总线驱动是对硬件设备适配器端的实现
2020-11-30 15:45:16
AUTOSAR中的IIC如何实现和配置
也许你会很好奇,为啥?MCAL和CDD有啥不一样?如果你是初学者,建议你先把这问题放一放,看我下面的讲解。 2. IIC的MCAL实现方式 实际上IIC也可以按照MCAL的方式来实现,Vector就给出了直接的解决方案,就把IIC当MCAL来实现了。
2022-12-12 09:25:48
《基于FPGA的IIC设计》
A0,A1,A2 为 24LC64 的片选信号,由于 IIC 总线可以挂载多个 IIC 接口器件,所以每个器件都应该有自己的“身份标识”,通过对 A0,A1,A2 输入不同的高低电平,就可以设置该 EEPROM 的片选信号。
2020-11-20 16:21:37
RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示
“RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示。从IIC协议的核心原理、FSP中I2CMaster的配置
2026-01-01 10:04:29
iic的时钟信号哪里来的?
iic的时钟信号哪里来的? IIC(Inter-Integrated Circuit)总线是一种基于同步串行通信的通信标准。在IIC总线上,每条线路上都有两个信号,一个是时钟信号(SCL),另一个
2023-09-19 17:16:02
IIC设备需要的线挺长如何操作?
因为之前使用的IIC设备线太长,读取设备数据容易出错,缩短线长就没问题,但是实际需要长线,这种情况如何处理,能在长线设备上良好的传输IIC数据将单IO信号转换成LVDS信号,提高传输距离。
fansz
2023-06-28 08:08:50
IIC的通信原理及分析IIC的真实波形
玩单片机的朋友都知道IIC通信这个工具,但好多人只是会用,内部的原理不求甚解,或是想要了解其原理,但却对抽象的时序描述一头雾水。本文将从实测的IIC波形入手,带你看到真实的IIC样子,进而去理解
heks
2022-02-24 06:01:06
STM32基础知识:IIC概述与软件模拟IIC
内部集成电路(Inter Integrated circuit )的简称叫做IIC,是一种简单的、半双工同步通信的串行通信接口,IIC总线是上世纪80年代(1982年)由飞利浦公司设计出来,当时的目的是为了给MCU和外围芯片提供更简单的交互方式。
2023-10-26 11:47:43
51单片机模拟IIC通信,实现基于PCF8591的A/D转换
使用89C52单片机,利用Proteus软件,绘制仿真电路图。在电路基础上,编写代码实现基于PCF8591的A/D转换。话不多说,talk is cheap,give me code.具体的实现,大家还是看代码,写的比较清楚。不懂得可以楼下讨论,IIC总线还是要借助网上的资料,加深理解图片
木子花开
2019-09-24 10:08:28