This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1115:无法从ADS1115获取简单的SingleEnd数据。

Guru**** 2538950 points
Other Parts Discussed in Thread: ADS1115

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/646118/ads1115-unable-to-get-a-simple-singleend-data-from-ads1115

部件号:ADS1115
在“线程: ADS1015”中讨论的其他部件

您好,

我有两个ADS1115,并尝试与Arduino UNO板一起使用。
我正在按照 https://learn.adafruit.com/adafruit-4-channel-adc-breakouts上的说明进行操作
使用Adafruit的Arduino库,可从 https://github.com/adafruit/Adafruit_ADS1X15下载


我一直在尝试读取来自Arduini +3.3V的电压,但我从代码中得到的只是"-1"作为值。

AIN0:-1

AIN0:-1

AIN0:-1

AIN0:-1

AIN0:-1 AIN0:-1 

我搜索了多个来源,我可以看到,如果我得到"-1"值,可能是i2c问题。
什么问题?
我用两种不同的ADS1115测试,结果相同。

ino代码如下所示。
我的库中的文件.ccp和.h附加到此帖子。

#include <Wire.h>
#include <Adafruit_ADS1015.h>Adafruit_ADS1115

ADS1115 ADS (0x48);

void setup (void)
{
Serial.begin(9600);
Serial.println("Hello!");

serial.println (“正在从AIN0..3获取单端读数”);
Serial.println (“ADC范围:+/-6.144V (1位=3mV)”);
ads.begin();
}

void loop(void)
{
Int16_t ADC0;

ADC0 = ads.readADC_SingleEnded(0);Serial.print("Atln;
Serial.print")


DELAY (1000);
} 

e2e.ti.com/.../Adafruit_5F00_ADS1015.cppe2e.ti.com/.../Adafruit_5F00_ADS1015.h</s>1015.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    爱德华多


    我不确定您是否已经有了这种方法,但Adafruit有一个逐步指南,可将ADS1115连接到Arduino:

    cdn-learn.adafruit.com/.../adafruit-4-channel-adc-breakouts.pdf

    要调试此问题,我首先要做几件事:

    1.确保设备通电。
    2.检查ADDR是否接地。
    3.使用示波器或逻辑分析仪检查转至设备的I2C命令。

    此时,从设备读取-1将转换为FFFFh。 SDA永远不会降低。 这让我认为该设备没有拉下I2C引脚,因为它没有收到命令。 您只需使用示波器即可确保ADS1115已确认Arduino的命令。 您可以运行的另一项测试只是从ADS1115中读取配置寄存器。

    根据您对设备的编程和读取方式,可能存在其他通信问题,但如果您可以在示波器上看到SDA和SCL,则应清除所有这些问题。


    吴若瑟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我已经看到了。 这是我在帖子上引用的指南,但在网络版本中。

    1.该设备由Arduino提供的+5V电源供电,我通过万用表直接在设备引脚上确认了这一点。

    2.接地。

    3.我没有工具,需要为我提供工具。

    因此,我尝试将一个简单的代码发送到配置寄存器,然后再读回来看看发生了什么。

    我使用的代码如上所示。
    根据数据表,我必须发送代码以访问配置寄存器(0.0001万 - 0x01),然后发送我想要的配置(11.0011万101010000011 -10.101万 - 0xCE830.0011万 0xCE83)。 然后,要读取我发送代码以访问配置寄存器并关闭,请请求1个字节,获取并打印。 (https://www.arduino.cc/en/Reference/WireRead)

    #include <Wire.h>
    
    void setup()
    {
    Serial.begin(9600);
    Wire.begin();
    }
    
    void loop()
    {
    Serial.println("Start Writing");
    Wire.beginTransmission(0x48);
    Wire.write(1);
    Wire.write(0xCE83);
    Wire.endTransmission();
    serial.println ("结束写入");
    
    serial.println ("开始读取");
    Wire.beginTransmission(0x48);
    Wire.write(1);
    Wire.endTransmission ();
    wire.requestFrom (0x48,1);
    字节valor;
    if (Wire.available ()){
    valor=Wire.read();
    }
    Wire.endTransmission ();
    Serial.println ("结束读取");
    Serial.println (valor);
    
    DELAY (1000);
    } 

    我得到的结果是0

    开始写入
    结束写入
    开始读取
    结束读数
    0
    开始写入
    结束写入
    开始读取
    结束读数
    0
    开始写入
    结束写入
    开始读取
    结束读数
    0
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    爱德华多


    首先,我要说的是,我不会做太多的编码工作,因此我可能无法在调试Arduino代码方面提供太多帮助。 但是,您是否可以尝试以下方法:

    Wire.beginTransmission(0x48);
     
    wire.write (0x01);
     
    wire.write (0xCE);
    wire.write (0x83);
    wire.endTransmission ();

    我认为Arduino代码将传输分成字节事务,因此将写入分成字节。

    从设备读回来,只需记住配置寄存器是2个字节。 您需要回读2个字节,而不是1个字节。

    但是,如果您继续返回0,我认为您仍需要获得某种示波器或逻辑分析仪。 此时,无法知道信号是否来自Arduino,以便与ADS1115通信。


    吴若瑟