登录/注册

i2c读adc转换程序

更多

以下是一个基于 Arduino 平台的 I2C 读取 ADC 转换的通用示例(以常见芯片 ADS1115 为例):

#include <Wire.h>

#define ADS1115_ADDR 0x48 // I2C地址 (ADDR引脚接地)

void setup() {
  Wire.begin();
  Serial.begin(9600);
}

void loop() {
  // 配置ADC参数 (通道0, ±4.096V范围, 单次转换模式)
  uint8_t config[] = { 
    0x01,               // 指向配置寄存器
    0xC2, 0x03        // 具体配置: A0通道, 4.096V, 128SPS
  };

  // 发送配置
  Wire.beginTransmission(ADS1115_ADDR);
  Wire.write(config, 3);
  Wire.endTransmission();

  delay(10); // 等待转换完成(根据采样率调整)

  // 读取转换结果
  Wire.beginTransmission(ADS1115_ADDR);
  Wire.write(0x00); // 指向转换寄存器
  Wire.endTransmission();

  Wire.requestFrom(ADS1115_ADDR, 2);
  if(Wire.available() == 2) {
    int16_t raw = Wire.read() << 8 | Wire.read();
    float voltage = (raw * 4.096) / 32768.0; // 计算实际电压

    Serial.print("电压值: ");
    Serial.print(voltage, 4);
    Serial.println(" V");
  }
  delay(1000);
}

关键点说明:

  1. I2C地址设置:

    • ADDR引脚的不同接法会改变地址 (0x48-0x4B)
    • 常见默认地址为 0x48 (ADDR接地)
  2. 配置寄存器详解:

    [1] OS:  1 (启动单次转换)
    [1] MUX: 100 (选择A0通道)
    [0] PGA: 010 (±4.096V量程)
    [0] MODE: 1 (单次转换模式)
    [1] DR:  100 (128 SPS)
    [0] COMP_*: 默认比较器设置
  3. 结果计算:

    • 16位有符号数转换 (范围 -32768~32767)
    • 实际电压 = (原始值 × 量程) / 32768

常见问题处理:

  1. 设备无响应:

    • 检查I2C地址是否正确 (用扫描工具确认)
    • 确认接线是否正确 (SDA/A4, SCL/A5)
    • 确保上拉电阻已连接 (通常4.7kΩ)
  2. 数据异常:

    • 检查量程是否匹配输入电压
    • 增加转换等待时间 (根据采样率调整delay)
    • 验证字节顺序 (高位在前或小端模式)
  3. 多通道切换: 修改MUX配置位:

    • A0: 100
    • A1: 101
    • A2: 110
    • A3: 111

其他ADC芯片(如PCF8591)需根据其数据手册调整寄存器配置。建议始终参考具体芯片的技术文档进行参数配置。

I2C总线—电平转换

我们先来看一张图,熟悉I2C的人一看,这不是I2C的level shifter电路嘛,在Philip的I2C标准里面有,没有啥复杂的。

2023-11-02 12:32:20

i2c采样是上升沿吗?

i2c采样是上升沿吗?  I2C采样是指在I2C总线上对数据进行采样。在I2C

2023-09-19 17:16:05

什么是串口转I2C?有什么特点?

什么是串口转I2C?有什么特点?  串口转I2C是一种设备,用于将串行通信接口(通常称为串口)转换为

2023-09-14 17:52:49

硬件I2C与模拟I2C

硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C

资料下载 佚名 2021-12-28 19:14:11

嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序,I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接

文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号

资料下载 tr12345 2021-12-06 14:06:07

如何将I2C从地址左移1位

  I2C总线读写中,新人会比较困惑,为什么I2C从地址要左移1位?这是i2c协议决定的,

资料下载 李霞 2019-08-05 17:34:00

使用51单片机IO模拟I2C程序免费下载

本文档的主要内容详细介绍的是使用51单片机IO模拟I2C的程序免费下载。

资料下载 佚名 2019-08-02 17:34:00

STC89C52单片机的I2C使用程序免费下载

本文档的主要内容详细介绍的是STC89C52单片机的I2C使用程序免费下载。

资料下载 鼠爱米 2019-07-26 17:36:00

I2C先写后读是什么

I2C 读 I2C 先写后读 其实所谓的 I2C

2023-07-22 15:58:08

I2C debug出现问题怎么解决

错误; I2C slave 设备不处于正常工作状态,比如未给电,错误的上电时序等; 时序不符合 I2C slave 设备所要求也会产生 Nack 信号。 3、当外设对于

2023-07-22 15:00:27

如何提高I2C调试效率?

一般情况下,我们想要调试这类 I2C 器件,都需要先找一块主控 MCU 板卡,用杜邦线将 I2C 器件连接到板卡上,然后编写 MCU 代码,需包含 I2C

2023-06-08 13:00:08

关于I2C总线的读写操作流程详解

本文主要介绍I2C总线的读写操作流程。 I2C总线的操作包括读和写,具体的操作流程如下。

2020-11-29 09:38:00

I2C总线驱动的C语言源程序详细说明

 i2c 总线上单片机系统中常用到的总线技术这里给大家介绍一个I2C总线驱动的C51语言源

2020-09-26 11:07:25

I2C双向电平转换电路

本文分享下I2C双向电平转换电路的设计原理,以及需要注意的事项。 在I2C主从设备对接时,需要考虑主从设备的电平情况,常规的主要有3种:5V,3

2020-03-30 11:10:29

怎么使用I2C读取12位ADC

我想读一读从LTC2309到I2C的12位ADC转换,从PIC18F46

2020-03-18 08:32:57
7天热门专题 换一换
相关标签