主题中讨论的其他器件: 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);