RaspiAudio 8xOUT and Raspberry Pico 2 as 4x speaker cross-over

I am running the 8xOUT using a Raspberry Pico 2 microcontroller. The Pico runs 2x4 DSP channels and the DSP coefficients are directly compiled into the code to drive two 4 speaker crossovers. Of course, I can recompile, should I wish to modify the coefficients. The output goes into a 9.2 receiver amplifier, modified to take the DSP outputs directly into the volume stage and 8x end stage amplifiers.

Since the Pico 2 (RP2350 architecture) is dedicated to this task, it is not disturbed by further operating system tasks, so the 8xOUT is a lot more stable than using a Raspberry Pi.

You need the following inputs on the 8xOUT:

Data/signal Pico2 8xOUT Description
+5V0    	VBUS	 2	Power 5V
DAC3/DIN4	GP15	13	TWEETER stereo band. NOTE: RaspiAudio error: not pin 11!
BCK/BCLK	GP12	12	Common bit clock to ADC and all DACs.
GND(<GP10)	GND 	14	Ground
DAC1/DIN2	GP13	16	LOW_MID stereo band.
DAC2/DIN3	GP14	22	HIGH_MID stereo band.
LRC/LRCK	GP10	35	Common Left/Right stereo frame clock to all 4 DACs.
DAC0/DIN1	GP11	40	WOOFER stereo band.

The 8xOUT numbering is the numbering of the header of a Raspberry Pi 5, not the RaspiAudio pin numbering.

The DSP software can be derived from my GitHub project **pico2-four-stereo-dsp-standby. **
You may wish to remove Ethernet and ADC functionality, since this was for my specific project to feed the 4x DSP with the selected audio channel on the 9.2 receiver amplifier.

Stage 1: Project start: The project initially started with a Raspberry Pi 5 and the RaspiAudio 8xOUT board. I hoped that running PiCorePlayer and CamillaDSP would drive my set of speakers each using 4 speaker drivers (woofer, low-mid, high-mid, tweeter). It turned out that the Pi5 was not stable in the channel allocations and that it would swap channels 1 and 3 and swap channels 2 and 4. Of course, for sensitive tweeters, it would mean they all of a sudden might get high energy bass signals, leading to their destruction. So I had to abandon the Pi5+8xOUT combination.

Stage 2: Looking for a stable solution: I found out that channel switching would not occur when using a 8-channel USB audio output device. So I purchased a Behringer UMC1820 as 8 channel DAC to deliver the analog signals to my 9.2 surround amplifier. This turned out to be working perfectly with excellent sound.

Stage 3: Downscaling the size: The above stage 2 solution is quite bulky with an external Pi 5 and a Behringer unit, so I investigated whether a Raspberry Pico 2 micro-controller could be programmed for the specific task of transforming 2 channel stereo audio into stereo 4-channel cross-over filtered audio using DSP. The project involved 4 PCM5102 boards (equal to the chips on the 8xOUT), and I managed to get this working by one Pico2 core doing the audio transport and the other Pico2 core doing the DSP processing. This could all be mounted inside a DVD player unit, which usually has plenty of space to store further electronics. I came to a workable and stable solution.

Stage 4: Adding functionality: As the Behringer also has 8xIN, I explored whether the pre-amp stage of my amplifier could be fed to the DSP, to retain the full functionality of channel selections on the amplifier. As the amplifier can deliver ca 1100 W full power, adding automatic switching off was another requirement. So A PCM1808 ADC board and a W5500 Ethernet board were added to the build. This combination led to the Github repository mentioned above.

Stage 5: Back to the RaspiAudio 8xOUT: The RaspiAudio 8xOUT is a nice and compact packaging of 4x PCM5102A, a lot cleaner build than 4 boards cobbled together. This build is based on using headers on a print board, whereby both the Pico 2 and the 8xOUT can be clicked in, and replaced as desired. Pictures of this follow below:

The header board, the Pico 2 and the 8xOUT

The set mounted together.

Backside of each of the components and wiring conform the table above.

Color coding:
GREEN: 4x DIN (DIN1, DIN2, DIN3, DIN4)
BLACK: GND
RED: LRCK and BCK clock signals.

1 Like

nice! we are in the process of making a universal motherboard with pico 2350 designed for DSPi with the classic Raspberry Pi 40 pins header, to be used with 8xIn, 8xIn out, and soon to be released 8xout Studio.

we will release it very soon for pre order.

1 Like

It is important then that the ADCs can run on the same DAC LRCK and BCK. This eliminates drift between ADC and DAC and therefor the need for resampling and buffering, which causes unnecessary overhead for the Pico 2.

I also experimented with the Pico2 W for streaming audio over WIFI. This worked for streaming WIFI to USB using Apple Airplay ( GitHub - SBolinha/pico-usb-wifi-pico2w: Validated Raspberry Pi Pico 2 W (RP2350) port of baiyibai's pico-usb-wifi transparent USB CDC-NCM โ†” Wi-Fi bridge ยท GitHub ) to 1x stereo out (PCM5102). However, I ran into processor limitations when trying to add DSP functionality and 8x speaker output. For now, I abandoned that idea.

So currently, I have two working solutions involving the Pico 2 and the RaspiAudio 8xOUT:

1. The Pico 2 as USB/DSP audio device, currently fixed at 16 bit 44.100 Hz sample rate, 2x 4 speaker pre-out (not on GitHub).

2. The Pico 2 as ADC/DSP/DAC audio device, running at 24 bit 96000 ADC, 32 bit 96000 DSP and 24 bit 96000 DAC, 2x 4 speaker pre-out. The ADC (PCM1808) required 2x 10kOhm rotary potmeters to adjust the audio level and to avoid clipping pre-ADC, setting the voltage division at ca. 90% of the input signal. And the mentioned automatic switch-off of the amplifier if the ADC input level stays below -60 dB for 5 minutes, switching the amplifier over Ethernet (W5500 adapter and Onkyo protocol).

So it is important to limit functionality and manage expectations to meet the performance the RP2350 chipset can support.