Amplitude and Offset

How amplitude is set

Output amplitude is produced by three things acting in series:

  1. An X9C103 attenuator — 100 wiper positions, driven by the a command.
  2. An X9C103 gain potentiometer — 100 wiper positions, driven by the g command.
  3. A 15-bit digital fine scale — 32,768 steps applied to the wavetable values before they reach the DAC.

The two potentiometers give 100 × 100 = 10,000 analog combinations. The digital scale interpolates between them.

Amplitude range0.93 - 15.15 Vpp
Analog combinations10,000
Digital fine scale15-bit, 32,768 steps
Absolute output rail±10 V, hard clip
The wiper positions live in EEPROM and survive power cycles, but they do not survive a firmware flash -- the build erases the chip. After a reflash the wipers home to position 99, which is 15.15 Vpp. Confirm the amplitude before connecting a load to a freshly flashed board.

The X9C parts have no read-back. The firmware cannot ask them where their wipers are; it can only drive them to a known end stop and count steps from there. That is why the board homes them at boot, and why the app reads the stored positions from the board’s status reply rather than assuming its own last-sent value is still correct.

How offset is set

DC offset comes from a separate 16-bit DAC.

Offset range±7.58 V
Offset DAC16-bit, 65,536 codes

In single-channel generator modes, that DAC and CH2’s ba/bg potentiometer pack together form CH1’s offset chain. This is the same hardware that generates CH2’s waveform in Dual mode — which is why the offset behaves differently depending on the mode, and why the static offset command is refused in modes where the DAC is busy generating.

The shared headroom budget

This is the most important behaviour on this page.

Amplitude and offset share one headroom budget. The output stage has a finite span. Every volt of that span you spend on peak-to-peak amplitude is a volt you cannot spend on shifting the waveform up or down. Ask for more amplitude and less offset remains reachable; back the amplitude off and the offset range opens up again.

The app shows this live as a REACHABLE ±x.xx V ceiling next to the offset control. That number is not a fixed specification — it is the current offset limit at your current amplitude, and it shrinks as you raise the amplitude. If you set an offset and then increase the amplitude, expect the reachable ceiling to fall past your setting, and expect the app to tell you so.

Why the ceiling differs between modes

ModeOffset sourceReachable ceiling
CH1 Generator (single channel)Dedicated 16-bit offset DAC and ba/bg chainFull ±7.58 V
Dual IndependentDigital headroom only — the offset DAC is CH2’s waveformReduced; competes directly with amplitude

In single-channel modes, CH1 gets its amplitude from its own a/g chain and its offset from a separate chain. Two independent pieces of hardware means the full ±7.58 V is available.

In Dual mode there is no spare chain. Both DACs are producing waveforms, so any offset has to be baked into the digital sample values before they reach the DAC, which consumes the same numerical headroom the amplitude is using. That is the direct, physical reason the offset range collapses in Dual mode, and it is why the static offset command bd is refused there outright — there is no converter free to hold a DC level on.

Clipping

The output clips hard at ±10 V. The firmware and app will not stop you from requesting a combination of amplitude and offset that pushes a peak past that rail; the rail simply flattens it.

If your waveform looks flat-topped:

  1. Check the offset. An offset that is small on its own may still push the positive peak into the rail once amplitude is added.
  2. Reduce amplitude, or centre the offset at zero and re-check.
  3. Remember that the clip is at the rail, not at the requested value — a clipped output is still delivering ±10 V into your circuit.

Practical order of operations

Set amplitude first, then offset. The reachable offset ceiling is a function of amplitude, so choosing amplitude last means watching your offset setting get clamped. Doing it in this order, the app’s REACHABLE readout tells you exactly what you have to work with before you commit to a number.

Updated · Full project report (PDF)