

The Adafruit ADS122C04 (Part ID: 6432) is a high-precision analog-to-digital converter (ADC) designed to provide 24-bit resolution for accurate measurement of small signals. This component is ideal for applications requiring precise data acquisition, such as sensor interfacing, temperature measurement, and industrial monitoring. Its compact design and I²C interface make it easy to integrate into a wide range of projects.








The ADS122C04 is a versatile ADC with the following key technical details:
| Parameter | Value |
|---|---|
| Resolution | 24-bit |
| Number of Channels | 4 (multiplexed) |
| Input Voltage Range | 0V to VREF (reference voltage) |
| Reference Voltage (VREF) | 2.048V (internal) or external (up to 5V) |
| Interface | I²C |
| Operating Voltage | 2.3V to 5.5V |
| Operating Temperature Range | -40°C to +125°C |
| Data Rate | Programmable: 20 SPS to 2000 SPS |
| Gain | Programmable: 1x to 128x |
| Power Consumption | 315 µA (typical) |
The ADS122C04 comes in a compact package with the following pinout:
| Pin | Name | Description |
|---|---|---|
| 1 | VDD | Power supply input (2.3V to 5.5V) |
| 2 | GND | Ground |
| 3 | SDA | I²C data line |
| 4 | SCL | I²C clock line |
| 5 | AIN0 | Analog input channel 0 |
| 6 | AIN1 | Analog input channel 1 |
| 7 | AIN2 | Analog input channel 2 |
| 8 | AIN3 | Analog input channel 3 |
| 9 | REF+ | Positive reference voltage input |
| 10 | REF- | Negative reference voltage input |
| 11 | DRDY | Data ready output (optional, can be polled via I²C) |
| 12 | ADDR | I²C address selection pin (connect to GND or VDD to set address) |
Below is an example of how to interface the ADS122C04 with an Arduino UNO using the Wire library:
#include <Wire.h>
#define ADS122C04_I2C_ADDRESS 0x40 // Default I²C address
void setup() {
Wire.begin(); // Initialize I²C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure the ADS122C04 (example: set gain, data rate, etc.)
Wire.beginTransmission(ADS122C04_I2C_ADDRESS);
Wire.write(0x40); // Write to configuration register (example value)
Wire.write(0x08); // Example configuration: gain = 1, data rate = 20 SPS
Wire.endTransmission();
Serial.println("ADS122C04 initialized.");
}
void loop() {
// Request data from the ADS122C04
Wire.beginTransmission(ADS122C04_I2C_ADDRESS);
Wire.write(0x10); // Command to read conversion result
Wire.endTransmission();
Wire.requestFrom(ADS122C04_I2C_ADDRESS, 3); // Read 3 bytes (24-bit result)
if (Wire.available() == 3) {
uint32_t result = 0;
result |= (Wire.read() << 16); // MSB
result |= (Wire.read() << 8); // Middle byte
result |= Wire.read(); // LSB
// Convert result to signed 24-bit value
if (result & 0x800000) {
result |= 0xFF000000; // Sign-extend for negative values
}
int32_t signedResult = (int32_t)result;
// Print the result
Serial.print("ADC Result: ");
Serial.println(signedResult);
}
delay(500); // Wait before the next reading
}
No Communication with the ADC
Incorrect or Noisy Readings
Device Not Responding
Q: Can I use the ADS122C04 with a 5V microcontroller?
A: Yes, the ADS122C04 supports operating voltages up to 5.5V, making it compatible with 5V systems.
Q: How do I measure differential signals?
A: Connect the positive signal to one analog input (e.g., AIN0) and the negative signal to another (e.g., AIN1). Configure the ADC for differential mode in your code.
Q: What is the maximum sampling rate?
A: The ADS122C04 supports a maximum data rate of 2000 samples per second (SPS).
Q: Can I use an external reference voltage?
A: Yes, connect your external reference voltage to the REF+ and REF- pins. Ensure it is within the specified range.
This concludes the documentation for the Adafruit ADS122C04 24-Bit ADC.