PreAmplifier v2.0

Tuesday, 01 October 2013 21:10 Menno de Graaf

Preamplifier display

Products related to this project are for sale on this page.
More information for this project can be found on the support page.


Several years ago, I designed and built a multichannel pre-amplifier based on BurrBrown's PGA2311 volume control chip. It is still playing nicely in my living room, but since then technology has improved (e.g. OLED displays have become common and better ICs are available). Also it lacks some features (like multiple 5.1 inputs, automatic switch off, audio/video playback, smartphone control, etc), so I decided to do a redesign.


This is a modular preamplifier, so the features depend a lot on the different pcb's that are used. The heart of the preamp is the PreampController pcb, which connects the other pcb's, display, buttons, encoder, infrared, etc. Other sensible configurations are:

An overview of features is given per pcb:


The architecture and the signal flow of a full 5.1-channel preamp are shown in the figure below.
PreAmplifier Architecture


The preamp needs a digital single 5V supply and analog dual 9V supply. The functionality of the different pcb's will be described in detail next.

StereoInputSelection pcb

Stereo Input Selection pcbStereo Input Selection connectors

On this pcb, a maximum of 6 cinch inputs can be mounted, using these cinch connectors the pcb can be mounted directly to the back panel of the preamp. The MCP23S08 8-bit SPI I/O extender IC is used to select the desired input using SPI. It switches miniature relays to choose between the inputs. Optionally, 1 input comes from the DAC pcb. Optionally, a 5.1 Input Selection pcb can be stacked on top of this pcb using spacers.

PreampController pcb

Preamp Controller mounted

The heart of the PreampController is the PIC18F4620 microprocessor. This control board has many connectors:

An onboard relay can be used to switch the power of external equipment when the preamp is switched on.

CS3318VolumeControl pcb

CS3318 Volume Control mounted (5.1 ch version)

The Cirrus Logic CS3318 chip is a 8-channel volume control IC, which will be controlled using SPI. The CS3318 needs dual 8 or 9V analog supply, which gives some extra headroom compared to my previous dual 5V preamp. The digital supply and logic is 3.3V, so a voltage regulator and SPI level converters are used to interface the CS3318 with the 5V used in the PreampController pcb.

Currently, 2 versions of this PCB are designed:

5.1 channel version

The 5.1 version of this pcb contains an integrated headphone amplifier. For it, 2 channels of the CS3318 are used, the other 6 channels are used to control the 5.1 outputs. The inputs are buffered using OPA2134 opamps. An onboard Hafler circuit is used to create virtual surround for the surround/center/bass channels from the stereo channels. The difference of the stereo channels is used for the surround channels, the sum of the front channels for the center/bass channels. Using a digital output from the PreampController a relay is switched to select whether to use the Hafler virtual surround or the surround/center/bass inputs directly.

8 channel version

The 8 channel version of this pcb contains OPA2134 opamps to buffer the inputs. Additional pcb's can be chained to control additional channels (16-channels currently supported by the software)

Digital Supply pcb

Provides regulated 5V supply for the digital electronics. An example of a combined supply pcb for both digital and analog supply is the TripleRegulated_EI38_supply. A suitable separate supply is the DualRegulated_15/25VA_supply.

Analog Supply pcb

Provides regulated 9V supply for the analog electronics on the CS3318VolumeControl pcb, optionally also for the DAC pcb. An example of a combined supply pcb for both digital and analog supply is the TripleRegulated_EI38_supply. A suitable separate supply is the DualRegulated_15/25VA_supply.

5.1InputSelection pcb

PCB side of the 5.1InputSelectionConnector side of the 5.1InputSelection

A separate pcb with 2x 5.1 inputs can be stacked on top of the StereoInputSelection pcb. Using 2 outputs of the MCP23S08 8-bit I/O extender on the StereoInputSelection these inputs can be selected.

CS4398DAC pcb

This DAC is based on CS8416 receiver chip and CS4398 DAC chip and is described in detail on its own project page. It will interface to the PreampController pcb using SPI.

OutputBuffers pcb

PCB side of the OutputBuffersConnector side of the OutputBuffers

The outputs of the CS3318VolumeController pcb can be buffered with this pcb if needed. Also it has connectors for balanced outputs. Cinch connectors can be directly mounted on this pcb, with these it can be mounted easily to the rear panel of the preamp. Analog power for the output buffers is received from the CS3318VolumeControl pcb.


Because I am familiar with C/C++ programming, I decided to use the SDCC (small device c-compiler). It is a free and unrestricted C-compiler for PIC (and other) micro controllers and I already used it in a couple of other projects.

To make future software updates much easier, I added a bootloader, which allows software updates without a dedicated programmer using the UART connector. I tested the software update process in combination with a Raspberry Pi, but it should be possible also with a USB to Serial adapter. The software update needs:

Note that the Unix Tiny PIC Bootloader Loader software was chosen because it runs from the Raspberry Pi command line and does not need a Graphical User Interface and therefore the software can be updated by logging in remotely. Unfortunately it did not work correctly out-of-the-box and quite some time was needed to modify the program for it to become useful. But finally I managed to get it running properly and it seems to work very reliable and it is fast (software update takes about 30s using baudrate of 115K2). Since an unmodified version of the Tiny Bootloader firmware was used it is also possible to use the Windows flash program that comes with the Tiny Bootloader in combination with a USB-to-serial adapter.

More information about the UART terminal and how to connect a Raspberry Pi can be found on the PreampV2 software page.

Currently the following software functionality is working:



Then the next question are: is it any good, how good is it, can you get me some proof? So, time to put it on the measurement bench. For the measurements I use RMAA with my EMU1212M sound card, which allows to measure extremely low distortion and noise levels. The preamp allows the signals in the chain to be taken out at various stages, so the particular contribution of the Input Selection relays or Output Buffer pcb can be seen as well. I measured the chain at 4 points:

Measurements where done in the chain: sound card optical out -> Preamp -> sound card analog in. All measurements done at 24-bit, 96 kHz. Front measurements done with volume set at 0dB.


Test DjukePreampV2-DAC DjukePreampV2-Monitor DjukePreampV2-Front DjukePreampV2-Headphones
Frequency response (from 40 Hz to 15 kHz), dB: +0.01, -0.12 +0.01, -0.12 +0.01, -0.16 -0.02, -0.18
Noise level, dB (A): -103.2 -99.3 -99.3 -99.0
Dynamic range, dB (A): 103.2 99.2 99.2 98.9
THD, %: 0.0003 0.0005 0.0008 0.0009
IMD + Noise, %: 0.0020 0.0032 0.0035 0.0036
Stereo crosstalk, dB: -102.0 -98.3 -98.0 -99.3

Complete measurement report can be found here.

Frequency response


Frequency response of the preamp

Total harmonic distortion


Total harmonic distortion

Measurement conclusions

User gallery


My fully equipped prototype with CS4398DAC, StereoInputSelection, 5.1InputSelection, CS3318VolumeControl, PreampController and a Raspberry Pi2 with HifiBerry Digi+ and Volumio mediaplayer.

Peter Bellamy

Fully featured 5.1 channel amplifier built inside a custom enclosure. Also includes a third party phono preamplifier.

Peter P.

Full 5.1 preamplifier with CS4398 DAC and Raspberry Pi media player built inside a custom cabinet.

Last Updated on Friday, 17 February 2017 11:44