# ADS1256 vs ADS1220 for Load Cell ADC Selection: Trade-Offs in DIY Sim-Racing Pedals

> Choose the right load cell ADC for your DIY sim-racing pedals. Compare ADS1256 vs ADS1220 trade-offs in sample rate, analog inputs, power, and complexity. Make informed DIY decisions.

- Repository: [chrgri/diy-sim-racing-ffb-pedal](https://github.com/chrgri/diy-sim-racing-ffb-pedal)
- Tags: deep-dive
- Published: 2026-02-27

---

**The ADS1220 consumes less power and requires no external voltage reference for simple single-channel setups, while the ADS1256 supports 15× higher sample rates and up to 8 analog inputs for advanced multi-sensor configurations at the cost of increased wiring complexity and higher current draw.**

The **chrgri/diy-sim-racing-ffb-pedal** firmware supports both the **ADS1220** and **ADS1256** 24-bit Sigma-Delta ADCs for load-cell measurement, with hardware selection controlled at compile time via conditional macros. Understanding the architectural trade-offs between these converters helps builders optimize for power consumption, sampling speed, and expansion capabilities without rewriting control logic.

## Sample Rate and Channel Capacity Trade-Offs

Maximum sampling speed differs significantly between the two devices. The ADS1220 delivers **2 kSPS** when configured with `ADS1220_DR_LVL_6` in the driver, sufficient for standard force-feedback pedal loops. The ADS1256 achieves up to **30 kSPS**, though the firmware typically utilizes `ADS1256_DRATE_2000SPS` for balanced performance, with headroom for ultra-low latency applications.

Channel availability represents another critical divergence. The ADS1220 provides **2 differential channels** (typically wired as AIN0-AIN1), limiting designs to a single load cell. The ADS1256 offers **8 single-ended or 4 differential channels**, enabling multi-load-cell setups or additional analog sensors without PCB redesign.

## Power Consumption and Reference Voltage Requirements

Current draw varies by an order of magnitude between devices. The ADS1220 consumes approximately **5 mA** at 2 kSPS, making it ideal for battery-powered or thermally constrained builds. The ADS1256 requires roughly **15 mA** at equivalent speeds and up to **30 mA** at maximum sample rates.

Reference voltage implementation also differs architecturally. The ADS1220 operates with the internal reference `ADS1220_VREF_AVDD_AVSS`, eliminating external precision components. The ADS1256 mandates an external voltage reference defined as `ADC_VREF` in the configuration, adding BOM cost and routing complexity but enabling higher accuracy at maximum gain.

## Firmware Implementation and Compile-Time Selection

The pedal firmware abstracts both devices behind a unified interface, selecting the active driver via the `USES_ADS1220` macro in [`Firmware_for_V3/PedalFirmware/include/Main.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Firmware_for_V3/PedalFirmware/include/Main.h):

```cpp
#define USES_ADS1220        // <-- selects ADS1220
#include "LoadCell_ads1220.h"
LoadCell_ADS1220* loadcell = new LoadCell_ADS1220();

```

When the macro is omitted, the system instantiates the ADS1256 implementation:

```cpp
// No USES_ADS1220 defined → ADS1256
#include "LoadCell.h"
LoadCell_ADS1256* loadcell = new LoadCell_ADS1256();

```

Both classes expose identical high-level APIs including `getReadingKg()` and `estimateBiasAndVariance()`. This abstraction allows [`Main.cpp`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Main.cpp) and motion control strategies in [`StepperMovementStrategy.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/StepperMovementStrategy.h) to remain hardware-agnostic.

## Driver Initialization and Library Dependencies

The ADS1220 initialization sequence in [`Firmware_for_V3/PedalFirmware/src/LoadCell_ads1220.cpp`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Firmware_for_V3/PedalFirmware/src/LoadCell_ads1220.cpp) configures the **ADS1220_WE** library with specific pin mappings:

```cpp
adsSPI.begin(FFB_ADS1220_SCLK, FFB_ADS1220_DOUT,
             FFB_ADS1220_DIN, FFB_ADS1220_CS);
static ADS1220_WE adc(&adsSPI, FFB_ADS1220_CS,
                      FFB_ADS1220_DRDY, true);
adc.setDataRate(ADS1220_DR_LVL_6);     // 2000 SPS
adc.setGain(ADS1220_GAIN_128);        // Load-cell optimized gain
adc.setVRefSource(ADS1220_VREF_AVDD_AVSS);

```

The ADS1256 initialization in [`Firmware_for_V3/PedalFirmware/src/LoadCell.cpp`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Firmware_for_V3/PedalFirmware/src/LoadCell.cpp) uses the **ADS1256** library with external reference parameters:

```cpp
static ADS1256 adc(ADC_CLOCK_MHZ, ADC_VREF, false);
adc.begin(ADC_SAMPLE_RATE, ADS1256_GAIN_64, false);

```

Both drivers are defined as dependencies in [`platformio.ini`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/platformio.ini), ensuring automatic library installation during the build process.

## Hardware Complexity and Cost Considerations

PCB footprint favors the ADS1220 for minimalist designs. It requires only a standard SPI bus plus a DRDY pin, with no external reference circuitry. The ADS1256 demands faster SPI clock speeds, additional pins for the expanded data bus, and careful layout around the external `ADC_VREF` network.

Cost and availability typically favor the ADS1220 in hobbyist markets, while the ADS1256 commands premium pricing often bundled with evaluation boards or multi-channel modules.

## Summary

- **ADS1220**: Optimal for single load-cell builds requiring minimal power (5 mA), simple two-wire SPI interfaces, and lower BOM costs without external references.
- **ADS1256**: Essential for configurations needing 30 kSPS sampling rates, up to 8 analog channels for pedal clusters or telemetry expansion, despite 15–30 mA power consumption penalties.
- **Firmware flexibility**: Both devices utilize identical class APIs through `LoadCell_ADS1220` and `LoadCell_ADS1256` implementations, selected via the `USES_ADS1220` macro in [`Main.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Main.h).
- **Reference architecture**: ADS1220 leverages `ADS1220_VREF_AVDD_AVSS` internally; ADS1256 requires external `ADC_VREF` precision voltage regulation.

## Frequently Asked Questions

### Can I switch between ADS1220 and ADS1256 without modifying the pedal control logic?

Yes. The firmware abstracts both ADCs behind identical interfaces in [`LoadCell_ads1220.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/LoadCell_ads1220.h) and [`LoadCell.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/LoadCell.h). Both implementations provide `getReadingKg()` and `estimateBiasAndVariance()` methods, ensuring [`Main.cpp`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Main.cpp) requires no changes. Toggle the `USES_ADS1220` macro in [`Firmware_for_V3/PedalFirmware/include/Main.h`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/Firmware_for_V3/PedalFirmware/include/Main.h) and update [`platformio.ini`](https://github.com/chrgri/diy-sim-racing-ffb-pedal/blob/main/platformio.ini) to include the appropriate library (ADS1220_WE or ADS1256).

### Why does the ADS1256 require an external voltage reference while the ADS1220 does not?

The ADS1220 integrates an internal reference selectable via `ADS1220_VREF_AVDD_AVSS`, sufficient for standard load-cell amplification with `ADS1220_GAIN_128`. The ADS1256 architecture relies on an external precision reference defined as `ADC_VREF` to maintain 24-bit accuracy across its wider `ADS1256_GAIN_64` range and higher sample rates, where internal references would introduce unacceptable noise.

### Is 2 kSPS sufficient for sim-racing force feedback applications?

Yes. The 2 kSPS rate configured with `ADS1220_DR_LVL_6` provides adequate temporal resolution for human force detection and pedal feedback loops. The ADS1256's 30 kSPS capability benefits only specialized telemetry applications or multi-channel scanning scenarios requiring microsecond-level synchronization, not standard force-feedback pedal operation.

### Which ADC consumes less power during operation?

The ADS1220 draws approximately **5 mA** during active conversion at 2 kSPS, while the ADS1256 consumes **15 mA** at equivalent speeds and up to **30 mA** at maximum throughput. For USB-powered or thermally constrained enclosures, the ADS1220 offers significant thermal and power budget advantages.