You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ADS1115输出ALERT脉冲以触发PIC32外部中断?

ADS1115 ALERT引脚无脉冲输出问题排查与解决

核心问题分析

你当前的ADS1115配置未启用转换完成指示模式,且忽略了开漏引脚的上拉要求,导致ALERT引脚无输出:

  1. 配置寄存器的COMP_QUE位错误:你设置的0b10000000低字节中,COMP_QUE[1:0] = 00,此时ALERT工作在比较器模式,需要配置THRESH_HI和THRESH_LO寄存器才会触发,而你未配置这两个寄存器,因此不会产生脉冲。
  2. ALERT引脚为开漏输出:ADS1115的ALERT引脚是开漏结构,必须外接上拉电阻(如10kΩ至VCC)才能输出有效电平,否则引脚处于高阻态,无法检测到脉冲。
  3. MUX位配置不符需求:你标注的是AIN1到GND,但高字节0xD4的MUX[3:0] = 1101,对应AIN0与AIN3的差分输入,而非AIN1单端输入(正确MUX应为1001),虽不影响ALERT输出,但会导致采样错误。

修正配置方案

1. 修改I2C初始化代码

将配置寄存器设置为转换完成指示模式(禁用比较器,每次转换完成触发ALERT),以下是符合需求的配置:

I2C2_CallbackRegister(MyI2CCallback, NULL);
I2CDataVector[0] = 0b00000001; // ADC Config register address 
// 高字节:AIN1到GND(MUX=1001)、±6.144V增益(PGA=010)、连续转换(MODE=0) → 0x94
I2CDataVector[1] = 0x94; 
// 低字节:128SPS(DR=100)、COMP_QUE=11(禁用比较器,启用转换完成指示) → 0x83
I2CDataVector[2] = 0x83; 

if(!I2C2_Write( ADS1115_ADDRESS, &I2CDataVector[0], 3 ))
{
    Lcd_Set_Cursor(2,1);
    Lcd_Write_String("I2Wr2");
}
  • 若你确实需要原差分输入(AIN0-AIN3),可将高字节保留为0xD4,仅修改低字节为0x83。

2. 硬件调整

在ADS1115的ALERT引脚与VCC之间添加10kΩ上拉电阻,确保引脚能输出稳定电平。

3. 验证I2C地址正确性

ADS1115地址引脚接地时,I2C设备地址为0x48,确认ADS1115_ADDRESS宏定义为该值。

4. PIC32外部中断配置

将外部中断触发方式设置为下降沿触发(开漏上拉后,ALERT平时为高,转换完成时拉低),或双边沿触发,确保能捕捉到转换完成的脉冲。

额外说明

当COMP_QUE[1:0] = 11时,ADS1115的ALERT引脚会在每次转换完成时输出一个脉冲(连续转换模式下),无需配置阈值寄存器。若需使用比较器模式(比如超限报警),才需要写入THRESH_HI和THRESH_LO寄存器,并设置合适的COMP_QUE值。

内容的提问来源于stack exchange,提问作者DamanZ4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:55:07