Function Generator
Amplitude and Offset
How amplitude is set
Output amplitude is produced by three things acting in series:
- An X9C103 attenuator — 100 wiper positions, driven by the
acommand. - An X9C103 gain potentiometer — 100 wiper positions, driven by the
gcommand. - 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 range | 0.93 - 15.15 Vpp |
| Analog combinations | 10,000 |
| Digital fine scale | 15-bit, 32,768 steps |
| Absolute output rail | ±10 V, hard clip |
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 DAC | 16-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
| Mode | Offset source | Reachable ceiling |
|---|---|---|
| CH1 Generator (single channel) | Dedicated 16-bit offset DAC and ba/bg chain | Full ±7.58 V |
| Dual Independent | Digital headroom only — the offset DAC is CH2’s waveform | Reduced; 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:
- Check the offset. An offset that is small on its own may still push the positive peak into the rail once amplitude is added.
- Reduce amplitude, or centre the offset at zero and re-check.
- 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)