主题中讨论的其他器件: ADS1219
您好!
使用 ADS1119读取 ADC 值时遇到问题。
对于 I2C、接收到来自 ADS1119的 ACK 响应。 我可以发送 CMD、对配置寄存器0x00进行写入、也可以读回我写的内容。
但是、读取 ADC 值始终是恒定的、并且与预期的值完全不同。 (预期:2.5V -读数:5V 满量程)。

ADC 配置 如下:输入2.5V AIN2-AGND、增益 1、90SPS、 连续转换模式、外部基准(5V)。
我不确定这里是否有任何问题。 如果对这一概念有任何误解,请告诉我。
P/s: 我的另一个观察结果是、当我尝试读回5个字节、3个前字节包含值(我期望 ADS1119数据表之后只有2个字节)。
我在尝试 从 ADC 读取5个字节时附加了通信的屏幕截图。

希望很快收到您的回复。 谢谢!
下面是我用于设置和读取 ADC 数据的代码:
// ADC set up
// Reset device by common I2C 0x00 call
Wire.beginTransmission(0x00);
Wire.write(0x06);
Serial.println(Wire.endTransmission());
delay(500);
// Read the value from the register 0x00 - should return 0 as default
Wire.beginTransmission(0x40);
Wire.write(0x20);
Serial.println(Wire.endTransmission());
Wire.requestFrom(0x40, 1);
if (Wire.available() == 1) {
int value = Wire.read();
Serial.println(value);
}
delay(100);
// Write a value to the register 0x00 - 0xA7 - 1010 0111 : AIN2AGND, GAIN 1, 90SPS, Continuous conversion mode, External ref
Wire.beginTransmission(0x40);
Wire.write(0x40);
Wire.write(0xA7);
Serial.println(Wire.endTransmission());
delay(100);
// Read the value from the register 0x00 - should return 0xA37= 0d167
Wire.beginTransmission(0x40);
Wire.write(0x20);
Serial.println(Wire.endTransmission());
Wire.requestFrom(0x40, 1);
if (Wire.available() == 1) {
int value = Wire.read();
Serial.println(value);
}
delay(100);
// Start conversion
Wire.beginTransmission(0x40);
Wire.write(0x08);
Serial.println(Wire.endTransmission());
delay(1000);
// main loop
//Reading data by cmd
uint16_t value;
Wire.beginTransmission(0x40);
Wire.write(0x10);
Wire.endTransmission();
Serial.print("Number of bytes requested :"); Serial.println(Wire.requestFrom(0x40, 2));
Serial.println();
value = (Wire.read() << 8 | Wire.read());
if (value > 0x7FFF)
{
value = 0x0;
}
float voltage = 5.0 * (float(value) / 32767) * 1;
Serial.println(voltage);
delay(1000);




