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

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:

#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:

// 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 and motion control strategies in StepperMovementStrategy.h to remain hardware-agnostic.

Driver Initialization and Library Dependencies

The ADS1220 initialization sequence in Firmware_for_V3/PedalFirmware/src/LoadCell_ads1220.cpp configures the ADS1220_WE library with specific pin mappings:

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 uses the ADS1256 library with external reference parameters:

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, 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.
  • 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 and LoadCell.h. Both implementations provide getReadingKg() and estimateBiasAndVariance() methods, ensuring Main.cpp requires no changes. Toggle the USES_ADS1220 macro in Firmware_for_V3/PedalFirmware/include/Main.h and update 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.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →