如何让ADS1115输出ALERT脉冲以触发PIC32外部中断?
ADS1115 ALERT引脚无脉冲输出问题排查与解决
核心问题分析
你当前的ADS1115配置未启用转换完成指示模式,且忽略了开漏引脚的上拉要求,导致ALERT引脚无输出:
- 配置寄存器的COMP_QUE位错误:你设置的
0b10000000低字节中,COMP_QUE[1:0] = 00,此时ALERT工作在比较器模式,需要配置THRESH_HI和THRESH_LO寄存器才会触发,而你未配置这两个寄存器,因此不会产生脉冲。 - ALERT引脚为开漏输出:ADS1115的ALERT引脚是开漏结构,必须外接上拉电阻(如10kΩ至VCC)才能输出有效电平,否则引脚处于高阻态,无法检测到脉冲。
- 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
相关产品推荐
相关产品推荐

