Full-scale-range-VS-offset-correction
Great question. They are two independent per-channel adjustments that work at different points in the signal chain, solving different problems.
Where Each One Acts
Analog Input Offset Correction Full-Scale Scaling ADC Core Digital Output
INA± ──────────────► [ − OFS_A ] ──────────► [ × FS_RANGE_A ] ──────► [ Convert ] ──────► Code
▲ ▲
shifts the zero point stretches/compresses
up or down the ±window
They act sequentially on the signal — offset correction first shifts the center point, then full-scale range sets how wide the conversion window is around that center.
Full-Scale Range — FS_RANGE_A/B/C/D
What it does
Sets the width of the input voltage window that maps to the full digital code range (−2048 to +2047). It is a gain adjustment — it changes the size of 1 LSB.
The equation
Changing FS_RANGE changes V_FS, which directly changes what voltage one LSB represents.
Practical effect
| FS_RANGE setting | V_FS | 1 LSB size | Use case |
|---|---|---|---|
| Minimum (0x2000) | ~0.5 V_PP | ~122 µV | Small signals — maximum sensitivity |
| Default (0xA000) | ~0.8 V_PP | ~195 µV | General purpose |
| Maximum (0xFFFF) | ~1.04 V_PP | ~254 µV | Large signals — avoid clipping |
Analogy
Think of it like zoom on a ruler. A narrow FS_RANGE zooms in (more resolution per volt), a wide FS_RANGE zooms out (fits larger signals without clipping).
Narrow FS_RANGE (0.5V window): Wide FS_RANGE (1.04V window):
+2047 ◄──── +0.25V +2047 ◄──── +0.52V
│ │
0 ◄──── 0V 0 ◄──── 0V
│ │
-2048 ◄──── -0.25V -2048 ◄──── -0.52V
Offset Correction — OFS_A/B/C/D
What it does
Corrects a DC shift in the signal or in the ADC core itself. Every real ADC has a small internal offset error — when the input is exactly 0V differential, the output is not exactly code 0, it is slightly above or below. OFS cancels this error.
It can also be used deliberately to shift the center of the conversion window to capture a signal that is not centered around 0V.
Practical effect
| Situation | Without OFS correction | With OFS correction |
|---|---|---|
| ADC has +2mV internal offset | Code 0 output when input = +2mV | Code 0 output when input = 0mV |
| Signal has a DC bias of +50mV | Wastes codes on one side, clips on other | Re-centers the window on the signal |
Analogy
Think of it like shifting the ruler up or down without changing its scale. The window width stays the same, but its center moves.
Without offset correction: After applying OFS:
+2047 ◄──── +0.402V +2047 ◄──── +0.400V
│ │
0 ◄──── +0.002V ← error 0 ◄──── 0.000V ✓
│ │
-2048 ◄──── -0.398V -2048 ◄──── -0.400V
Key Differences Side by Side
| Property | FS_RANGE | OFS |
|---|---|---|
| What it adjusts | Width of the input window (gain) | Center point of the input window |
| Effect on LSB size | Changes it | No effect |
| Effect on zero-code point | No effect | Shifts it |
| Corrects | Signal amplitude mismatch, clipping risk | DC offset errors, signal bias |
| Register range | 0x2000 → 0xFFFF | Approximately ±33 mV correction range |
| Applied per-channel | Yes | Yes |
How They Work Together
Consider a real-world scenario: your signal source has a +50 mV DC bias and a ±300 mV swing.
Without any adjustment, the ADC (default 0.8 V_PP window, centered at 0V) sees:
Signal range: −250mV to +350mV
+2047 ◄── +400mV ]
+350mV ] positive side has only 50mV headroom → clips!
0 ◄── 0mV
-2048 ◄── −400mV ] negative side has 150mV unused
Step 1 — Apply OFS to shift center up by 50 mV:
Window now covers −350mV to +450mV...
but that is not symmetric; FS_RANGE is a better tool here.
Step 2 — Widen FS_RANGE to 0.8 V_PP and apply OFS = +50 mV:
+2047 ◄── +450mV ] 50mV headroom above signal peak ✓
+350mV ] signal peak
0 ◄── +50mV ← window center shifted to match signal DC bias
-2048 ◄── −350mV ] 100mV below signal trough ✓
Now the full code range is efficiently used and neither end clips.
Summary in One Sentence Each
FS_RANGE answers: "How large a swing can the ADC accept without clipping?"
OFS answers: "Where is the center (zero point) of that swing?"
They are complementary — one sets the size of the conversion window, the other sets its position.