0% found this document useful (0 votes)
13 views

Parte1

The Elektor Audio DSP FX Processor board features an ESP32 microcontroller integrated with an ADAU1701 Audio DSP, allowing for high-quality audio processing. This board is designed for flexibility and versatility, supporting various applications such as Bluetooth audio sinks, guitar effect pedals, and music synthesizers. The document details the board's design, specifications, and circuit overview, emphasizing its multifunctional capabilities and ease of use in audio projects.

Uploaded by

hugosaldano
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Parte1

The Elektor Audio DSP FX Processor board features an ESP32 microcontroller integrated with an ADAU1701 Audio DSP, allowing for high-quality audio processing. This board is designed for flexibility and versatility, supporting various applications such as Bluetooth audio sinks, guitar effect pedals, and music synthesizers. The document details the board's design, specifications, and circuit overview, emphasizing its multifunctional capabilities and ease of use in audio projects.

Uploaded by

hugosaldano
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

project

or la • Elek
b
kt

to
Ele

r la
ORIGI

b
NAL

Ele k

ab
rl rl

to
ab
• Elek to

Audio DSP FX
Processor Board
Part 1: Features and Design
By Clemens Valens (Elektor)

The Elektor Audio DSP FX Processor board is basically an ESP32 microcontroller


with high-quality audio in- and outputs added to it. However, what sets this board
apart from other seemingly similar boards is that the audio interface integrates a
DSP capable of processing audio all by itself. This handy feature makes the board not
only powerful, but also flexible and versatile. In this first installment of a two-part
series, we will examine the board’s design and its features.

The Audio DSP FX Processor combines an Espressif ESP32 microcon- Before exploring the different use cases of the Audio DSP FX Processor
troller and an ADAU1701 Audio DSP from Analog Devices. The Audio board, let us first have a look at its schematic. As they say, a picture
DSP family is a series of high-performance digital signal processors is worth a thousand words. Also, have a look at the Specifications
(DSPs) optimized for audio processing. Programs for these DSPs are and suggested Applications inserts. This will help you understand
created with the free visual programming tool SigmaStudio by dragging the description of the circuit that follows. Now that you have done
and dropping pre-defined algorithm blocks on a canvas. that, let’s jump right in.

The ADAU1701 used here is not the most recent device, but it is the most Circuit Overview
accessible. Besides a user-programmable DSP core, the ADAU1701 A functional block diagram of the Audio DSP FX Processor board
has high-quality analog-to-digital and digital-to-analog converters is shown in Figure 1. It shows two main blocks, the ESP32 and the
built-in and features an I²S port. This makes it suitable as an audio ADAU1701, connected to each other with multiple busses. In the center,
interface for the ESP32. we find the I²S bus for transporting audio signals between the two

6 November & December 2024 www.elektormagazine.com


Specifications
> ADAU1701 28-/56-bi Applications
t, 50-MIPS digital audio
processor supporting sam > Bluetooth/Wi-Fi aud
pling rates of up to 192 io sink (e.g., loudspeak
> ESP32 32-bit dual-cor kHz & source er)
e microcontroller with
802.11b/g/n and Blueto Wi -Fi > Guitar effect pedal (st
oth 4.2 BR/EDR and BL omp box)
> 2× 24-bit audio inputs E > Music synthesizer
(2 VRMS, 20 kΩ)
> 4× 24-bit audio outpu > Sound/function gene
ts (0.9 VRMS, 600 Ω) rator
> 4× control potentiome > Programmable cross-
ter over filter for loudspeak
> MIDI in- and output > Advanced audio effect ers
s processor
> I²C expansion port (reverb, chorus, pitch shi
fting, etc.)
> Multi-mode operatio > Internet-connected aud
n io device
> Power supply: 5 V > DSP experimentation
DC USB or 7.5 VDC to 12 V platform
(barrel jack, center pin DC > Wireless MIDI
is GND)
> Current consumption > MIDI to CV converter
(average): 200 mA
> and many more!

I2 C
Extension EEPROM
Wi-Fi
Bluetooth

USB serial DAC


I2 S ADAU1701 Audio
ESP32-Pico-Kit
CV DSP & CODEC out
MIDI

Besides the signals mentioned thus far, the


Audio in ESP32 also features a USB-to-serial converter
and a MIDI input (optically isolated) and a
MIDI output.

Last but not least, the ESP32 has a radio for


Wi-Fi and Bluetooth communication, symbol-
Figure 1: The block diagram of the Audio DSP FX Processor contains two ized by the antenna symbol.
main blocks: an ESP32 processor and a DSP.
The Circuit
The detailed schematic of the Audio DSP FX Processor board is
presented in Figure 2. IC1 is the ADAU1701 audio DSP. The circuit
processors. If the DSP takes care of all the audio processing, which it that surrounds it is an almost verbatim copy-paste from the DSP’s
can do, this bus is not used and the ESP32 can be used for other tasks. datasheet. The only addition we allowed for is jumper JP1 that lets
you select the clock source for the DSP.
The I²C bus allows controlling the DSP from another processor like
the ESP32 or an Arduino UNO connected to the extension port. The The audio output filters (IC2, IC4, IC5 and IC6, see Figure 3) are imple-
DSP can use SPI for this too, but we chose I²C because it is easier to mented as four completely separated channels without any op-amp
expand than a SPI bus (no slave select signals required). sharing between channels. Not only did this simplify drawing the printed
circuit board, but it also allows for mounting only the parts required
This bus is also available for reading from or writing to the EEPROM. As for a certain desired audio output configuration (i.e., 2-channels with
an example, when the ADAU1701 is in what is called Selfboot mode, it passive filters or full-blown 4-channel with active filters. Note that the
expects its program to be stored in this EEPROM. The ESP32 can load price difference is minimal).
the EEPROM with a DSP program received from another computer,
wirelessly or over USB. The four analog signals that can control parameters inside the DSP
connect to MP9, MP2, MP3 and MP8 (ADC0 to ADC3, in that order).
The fourth bus runs from the ESP32 to the DSP and is for analog Depending on the position of a solder jumper (R16, R13, R7 and R9),
signals that can be used inside the DSP to control parameters of DSP the signal can either be a potentiometer or coming from the analog
algorithm blocks. This bus has four channels. We made these analog multiplexer (IC10 and IC11). The latter is required because the ESP32
voltages controllable by either potentiometers (which can be used for has only two analog outputs. In case a potentiometer is routed to the
other purposes, too) or by firmware running on the ESP32. DSP, be sure to remove its corresponding multiplexer series resistor
(R44, R46, R47, R45). Also, in this case, adjust P5 so that the hot side
The audio I/O bus (on the very right) consists of two input channels of the potentiometers is 3 V. When all potentiometers are connected
and four output channels. The outputs are filtered by either passive to the ESP32, adjust P5 to get 3.15 V as this slightly improves their
or active filters (see below), the inputs are filtered inside the DSP. dynamic range inside the ESP32.

November & December 2024 7


VCC VCC
IC10 = MCP6404T-E/ST
12
R47
14
IC10D 1k

The I²S bus can be a bit of a headache until you 4 13


C48 C53 C52 C57
IC10
figure it out. The ADAU1701 supports both I²S 11 100n 100n 1µ 1µ

master and slave modes and so does the ESP32. 16


10

So, who will be master and who will be slave? At the


VCC R46
12 8
14 X0 IC10C 1k
X 13 9
time of developing this project, there was only one 11
A
X1 C51 C56

IC11
solution because the ESP32 software libraries didn’t 15
Y
Y0
2 1µ 1µ

support I²S slave mode (yet). Therefore, the ESP32 10 Y1


B
3
74HC4053 R44
had to be the master. Problem solved? Almost. 4
Z
Z0
5
3 2
IC10A
1
1k
9 Z1 C49 C54
C

A subtle (undocumented?) detail of the ADAU1701 is VEE EN GND 1µ 1µ


7 6 8

that it requires the I²S clock signals to be synchro- 5


R45

nous with its master clock. If not, it mutes the audio


7
IC10B 1k
6
C50 C55
outputs, something we definitely don’t want. The
1µ 1µ
only way to ensure synchronicity when the DSP is
I²S slave, is by clocking the DSP from the ESP32.
MP8
This is where JP1 comes in. It allows choosing the MP9

DSP clock source: crystal X1 or the ESP32’s MCLK


MP3
FCS FSD1 MP2

signal. Therefore, when I²S is to be used, make sure


FSD0 FSD3
R9 * FSD2 FCLK
MP8 WP
to short pins 2 and 3 of JP1. If the I²S bus is not MP3
FSVP
FSVN
IO21
IO22

needed, short pins 1 and 2 of JP1. R7 * IO25


MOD1 IO19
MP11
MP1
R13 * R16 *
IO26 IO23
MP6 MP0
IO32 IO18
MP7
IO33 IO5
The ESP32 comes in the shape of an ESP32-PICO- MP5
IO27 EN IO10
SCL
MP4 SDA
KIT, an easy-to-use module with a USB-to-serial
IO14 IO9
/RESET IO12 RXD0
MP10
converter and a 3.3 V power supply on-board. Using IO13
IO15 BOOT
TXD0
IO35
+3V15
a module instead of mounting the ESP32 directly LED1
1k
R41
IO2
IO4 ESP32
IO34
IO38

onto the main board saves a lot of antenna-match- C23 IO0 Pico-Kit IO37
C58 *
P3 P4 RED 3V3 EN
ing and other RF-related issues and allows you to 100n 10k 10k GND GND
NC
+3V15
5V 3V3
mount the module only when it is needed. C58 is +5V
USB
P5

only needed in the rare case the ESP32 module will +3V3_ESP 1k
R36 *
/RESET

P2 P1
not boot when it is not connected to USB. If you R34
GND
VCC
SDA
SCL

10k 10k
WP

MIDI
NC

need it, you are probably using a very old module. K1 2 6


1k

MBR0580S1 D2
1 2 3 4 5 6
4
&
R40
R39
R38
R37

IC3

The DSP is powered from IC9 which in turn is


R35 H11L1S-M
FC68125 K1 1 5
470Ω
470Ω
470Ω
470Ω

220Ω
VCC
powered from either the USB port or from IC8.
The observant reader may wonder why there is no
protection diode like D3 in the 5 V supply coming
from the ESP32 module. The reason is that this
diode is already present on the ESP32 module.

Related to power is T1, which is required by the


DSP’s internal 1.8 V voltage regulator. The DSP’s datasheet suggests which is why R36 is not mounted by default. Mount R36 (82 Ω) to
to use it, and so we did. enable the output and make sure to use a suitable cable.

Programs for the DSP can be stored in IC7, the EEPROM (called E2Prom LED1 is available as a user-programmable LED, practical when debug-
in SigmaStudio). It provides much more memory space than required ging software or as mode indicator, or for other purposes.
for a DSP program, so the ESP32 can also use it for storing other
data. It is also accessible from connector K1 over the I²C bus, so it The current consumption depends highly on the application, of course,
can be read and written by an external device like an Arduino UNO but is, on average, around 200 mA for a supply voltage of 9 VDC.
or a Raspberry Pi Pico.
A Multifunction Board
A word about the MIDI interface. It is a straightforward optically-isolated Now that you have a vague idea of what the Audio DSP FX Proces-
input and a non-isolated output but connected to a 4-way 3.5 mm jack sor board is, let’s explore the multi-mode-operation specification in
socket (TRRS, tip-ring-ring-sleeve) due to board space constraints. more detail. As it suggests, it means that the board can be used in
Most people interested in MIDI will need only the input and use a TRS different configurations:
cable. Such a cable will short the MIDI output (pin R2 of K5) to ground,

8 November & December 2024 www.elektormagazine.com


+5V VCC

K6 D1 LM78M05 D3 AP2127N-3.3
R11*
IC8 IC9 0Ω VCC

MBR0580S1 MBR0580S1
C45 C46 C47
C40

10µ 1µ 1µ
16V C24 100n
VCC 4 2
C26 R18
470p 1 OUT0
R20 R21 IC2 604Ω
3
4k75 4k75 47µ
5 10V
C3 R1 R24
C1 C28 C29

1k

49k9
R6 10µ
47µ 16V T1
16V 3 JP2 C2 150p 3n3 Line out 1
R12 *

470Ω
100n
2 Selfboot C18 BC857
C4
10µ
3n3 C17 16V +1V8 VCC
1 C6 C5
K3 FC68125
100n 10µ
56n 16V
C7 C9
C41
100n 100n

C8 C10
C32 100n
100n 100n
4 2
R10 * 34 36 48 18 17 13 24 C34 R26
470p 1 OUT1
VDRIVE R28 R29 IC5 604Ω

IOVDD
PVDD
AVDD
AVDD

DVDD
DVDD
3
4k75 4k75 47µ
5 10V
6 R32
SELFBOOT C36 C37
R15 * 20

49k9
ADDR1/CDATA/WB 46
39 ADCOUT0
PLL MODE1 45 150p 3n3
5 ADCOUT1
RESET 44
ADCOUT2
R2 1% 43
Line in C11 2 ADCOUT3
18k ADC0
47µ VCC
16V R3 1% IC2, IC4, IC5, IC6 = MCP6401RT
C12 4
18k ADC1
47µ
16V IC1
C42
K2 FC68125

21 C25 100n
CLATCH/WP
23 11 MP0 4 2
SCL/CCLK MP0 C27 R19
22 10 MP1 470p 1 OUT2
SDA/COUT MP1 R22 R23 IC4 604Ω
29 MP2 3
MP2 4k75 4k75 47µ
ADAU1701 28 MP3 5 10V
MP3 R25
35 8 MP4 C30 C31
PLL_LF MP4

49k9
40 9 MP5
CM MP5
47 15 MP6 150p 3n3 Line out 2
FILTA MP6
R14 * 41 14 MP7
FILTD MP7
38 27 MP8
PLL_MODE0 MP8
3 26 MP9
ADCRES MP9 VCC
R8 * 30 16 MP10
RSVD MP10 K4 FC68125
7 19 MP11
ADDR0 MP11

C43

100n
DGND
DGND
PGND
AGND
AGND
AGND

C33
OSCO MCLKI 4 2
C35 R27
R42 33 1 37 42 31 32 12 25 470p 1 OUT3
10k R30 R31 IC6 604Ω
3
R43 R5 4k75 4k75 47µ
VCC 10k 5
100Ω

10V R33
R17 C38 C39
NC X1

49k9
R4
VCC C15 C16 C19 C20 C22 C21
150p 3n3
18k

8 100n 47µ 100n 10µ 100n 10µ 12.288MHz JP1 1 2 3


16V 16V 16V 1% C14 C13
VCC
1 6
A0 SCL
2 IC7 5 22p 22p DSP clock
A1 SDA
3 24LC256 7
A0 WP
VSS
4

230510-006

Figure 2: The schematic of the Audio DSP FX Processor. Everything fits on a board of approx. 102 mm by 66 mm.

Figure 3: Both active and passive output filters are supported by the Audio DSP FX Processor.

November & December 2024 9


Figure 4: The board
configured for DSP
stand-alone operation
without potentiometers.

> DSP only ing and testing new SigmaStudio algorithms on the fly. Place JP2 on
> DSP with on-board EEPROM programmer pins 1 and 2 to tell the DSP not to load its program from the EEPROM.
> DSP with OTA
> DSP as I²S DAC DSP as I²S DAC
> Music Synthesizer / Sound Generator In this configuration, the ESP32-Pico-Kit is the audio source while
> Advanced Audio Effects (FX) Processor the DSP acts as a high-quality digital-to-analog converter (DAC).
> Other Audio data is sent over I²S. Place jumper JP1 in position ext. MCLK (on
pins 2 and 3, the DSP clock is provided by the ESP32). For simplicity,
DSP Only place JP2 in the position Selfboot (pins 2 and 3, make the DSP load its
In this configuration (Figure 4), the board is identical to the “ADAU1701 program from the EEPROM) and program the DSP with a simple I²S
Universal Audio DSP Board” published in January 2014 (Elektor project pass-through program (included in the downloads). This configuration
130232). Programs for the DSP are created in SigmaStudio 4.7, exported is suitable for wireless (Wi-Fi or Bluetooth) streaming audio players.
as a HEX file, and loaded into the EEPROM through connector K1 with Sound effects like reverb or pitch shifting can be added easily by
e.g. an Arduino UNO [1]. Place jumper JP1 in position X1 (on pins 1 and 2, creating suitable algorithms in SigmaStudio and loading them into the
the DSP clock is provided by crystal X1) and JP2 in the position Selfboot DSP’s EEPROM. The four potentiometers are available for controlling
(pins 2 and 3, telling the DSP to load its program from the EEPROM). parameters (make sure the jumper resistors are positioned properly).
Jumper resistors R7, R9, R13, R16 should be positioned on the right, The analog audio input can, of course, be used too, allowing sing-along,
i.e., away from their name printed on the board, to enable potentiom- karaoke or other audio mixing applications.
eter control. This configuration allows for adding audio effects (reverb,
filtering, etc.) to the input signal. Popular applications include cross- Music Synthesizer / Sound Generator
over filters for loudspeakers, made possible by the four independent This configuration is basically the same as the previous one, except that
audio outputs, and guitar effects. now the ESP32 takes care of most (if not all) of the signal processing;
the DSP functions as a fancy I²S audio DAC. The ESP32 is the (sound)
DSP with On-Board EEPROM Programmer engine creating sounds from scratch using user-defined algorithms.
As DSP-only, but with the ESP32-Pico-Kit added to the board to simplify Several sound synthesis libraries are available online, making this an
EEPROM programming. DSP programs can now be uploaded over USB interesting domain to explore. The MIDI input allows you to play the
to the ESP32, which burns them into the EEPROM. Besides simplified synthesizer with a MIDI keyboard and control it with e.g., MIDI CC
EEPROM programming, this configuration also allows storing more (Control Change a.k.a. Continuous Controller) messages. Of course,
than one DSP program. As an example, a webserver running on the wireless control is possible as well, as is serial. The four potentiom-
ESP32 can provide a user interface that allows choosing between eters provide even more controls. For more fun, the DSP can add its
different DSP algorithms. own sound effects.

DSP with OTA Advanced Audio Effects (FX) Processor


Again, as DSP with ESP32-Pico-Kit, but in this setting the ESP32 As before, but instead of using the ESP32 as a sound source, it is now
provides a Wi-Fi connection to SigmaStudio for uploading DSP used as a digital signal processor. The ADAU1701 provides the audio
algorithms Over the Air (OTA), without exporting HEX files. This is the in- and outputs. It sends digital audio over I²S to the ESP32 where
easiest way to program the DSP in SigmaStudio, but the programs are it is processed. The result is sent back to the ADAU1701, again over
not stored in the EEPROM. This configuration is practical for develop- I²S. The ADAU1701 takes care of the digital-to-analog conversion and

10 November & December 2024 www.elektormagazine.com


Component List
Resistors (0805, 5%, 0.125W) Semiconductors
R7, R8, R9, R10, R11, R13, R14, R15, R16 = 0 Ω D1, D2, D3 = MBR0580S1
R1, R34, R41, R44, R45, R46, R47 = 1 kΩ 1% IC1 = ADAU1701JSTZ
R2, R3, R4 = 18 kΩ 1% IC2, IC4, IC5, IC6 = MCP6401RT-E/OT
R5 = 100 Ω IC3 = H11L1S-M
R6, R37, R38, R39, R40 = 470 Ω IC7 = 24LC256
R18, R19, R26, R27 = 604 Ω 1% IC8 = LM78M05
R20, R21, R22, R23, R28, R29, R30, R31 = 4.75 kΩ 1% IC9 = AP2127N-3.3
R24, R25, R32, R33 = 49.9 kΩ 1% IC10 = MCP6404T-E/ST
R35 = 220 Ω IC11 = 74HC4053PW
R42, R43 = 10 kΩ LED1 = LED, red, 0805
P1, P2, P3, P4 = 10 kΩ, lin/B, vertical T1 = BC857
P5 = 1 kΩ trimmer MOD1 = Espressif ESP32-PICO-KIT
R12, R17, R36 = NC
Miscellaneous
Capacitors (0805) JP1, JP2 = 3-way pin header,
C1, C4, C5, C20, C21, C45 = 10 µF 16V 0.1” pitch + jumper
C2, C6, C7, C8, C9, C10, C15, C19, C22, C23 = 100 nF K1 = 6-way pin header, 0.1” pitch
C40, C41, C42, C43, C44, C48, C53 = 100 nF K2, K3, K4, K5 = Audio Jack, 4 poles (TRRS)
C3, C11, C12, C16, C26, C27, C34, C35 = 47 µF 10V K6 = Barrel jack
C13, C14 = 22 pF K8, K9 = 17-way pin socket, 0.1” pitch
C17 = 56 nF X1 = 12.288 MHz, 20 pF
C18, C29, C31, C37, C39 = 3.3 nF PCB = Elektor 230510-1
C24, C25, C32, C33 = 470 pF
C28, C30, C36, C38 = 150 pF
C46, C47, C49, C50, C51, C52, C54, C55, C56, C57 = 1 µF
C58 = NC (100 nF if you really need it)

We connect you
with technology

Visit us
November 12-15
Hall C4.420

November & December 2024 11


Potentiometers
The Audio DSP FX Processor can be equipped with up to four potenti-
ometers. These can each be connected to either the DSP or the ESP32.
When connected to the DSP, they can be read through the auxiliary
ADCs in SigmaStudio (ADC1 to ADC4 in the GPIO block on the Regis-
ter Control tab of the Hardware Configuration tab of a project). In this
case, remove R44 to R47.

Figure 5: The locations of jumpers JP1 (middle) and JP2 (top). In the left The preferred, more flexible way is, however, to connect the potentiom-
bottom corner, you’ll find R36 that enables the MIDI output. eters to the ESP32. The device has two analog outputs that are turned
into four through multiplexing (IC10 and IC11) and they are connected
to the DSP’s auxiliary ADCs (pins MP9, MP2, MP3 and MP8). This
outputs up to four analog audio signals. The ADAU1701 can add, of allows the ESP32 to control the DSP’s auxiliary ADCs by the potenti-
course, its own (pre)processing. Effect parameters can be controlled ometers or in some other way (e.g., MIDI CC messages or wirelessly).
wirelessly, serially, over MIDI, and by the potentiometers, and even
over I²C if desired. Note that the multiplexed analog outputs can also be used as (slow)
digital outputs, which can be treated by a DSP algorithm as switches
Other or pushbuttons.
This configuration is for people who acquired the board but don’t
have a use for audio processing. Place JP1 in the position ext. MCLK MIDI
(pins 2 and 3) and JP2 on pins 1 and 2 (not Selfboot) so the DSP will The board’s optically isolated input (IC3) is intended as MIDI input (but
not consume much energy. The ESP32 module can be used as a it can also be used for something else, of course). For board-space
webserver, a USB-serial MIDI bridge, a USB-serial I²C bridge, a MIDI-to- reasons, the connector is a 3.5 mm jack socket (known in MIDI land
I²C converter, MIDI-to-analog converter and vice-versa, a 4-channel as TRS, from Tip, Ring, Sleeve) and not a 5-way DIN connector. The
analog-to-digital converter, an IoT sensor thingy or an LED blinker. MIDI input lets you control the ESP32 and/or the DSP with a keyboard
You are only limited by your own creativity, as they say. or a control surface.

Parameter Control As said, a MIDI output is available too. Mount R36 (82 Ω) to enable
Audio effects usually have one or more user-controllable parame- the output (Figure 5). Since the value of R36 is rather low, be careful
ters for adjusting the sound or effect in real-time. The Audio DSP FX with what you connect to K5. This must now be a 4-way 3.5 mm jack
Processor features several methods of doing this, most of which can (TRRS) and not a 2-way (mono or TS) or 3-way (stereo or TRS) type.
be used simultaneously. Because the MIDI output will probably not be needed by many people,
R36 is not mounted by default to avoid damaging the ESP32.
I²C
No matter which configuration is used, the DSP can always be USB Serial
controlled over I²C, either through K1 or by the ESP32. Since the The USB connector on the ESP32-Pico-Kit is a USB-to-serial port.
latter is connected to the same bus, it can be controlled over I²C too In Arduino, it is available as the default serial port (a.k.a. “Serial”). A
in case you wish to do so. computer can use this port to communicate with the ESP32, which

Figure 6: The Audio


DSP FX Processor uses
the ESP32 Pico-D4 as
“Board” in the Arduino
IDE.

12 November & December 2024 www.elektormagazine.com


can relay messages to the DSP over
I²C or via the analog control ports
(MP2, MP3, MP8 and MP9) or other
MP pins. The serial port can also be
used to provide a MIDI or I²C (on K1)
bridge.

Wireless
One of the main attractions of the
ESP32 is, of course, its wireless
capabilities. The ESP32-Pico-Kit
supports Wi-Fi 802.11b/g/n, Bluetooth
v4.2 BR/EDR, and Bluetooth LE. For
audio applications, the Bluetooth
functionality is particularly interest-
ing as it allows using the board as a
Bluetooth speaker (driver or “sink”)
but using it as a Bluetooth audio
source is possible too.

Getting Started
Out of the box with an empt y
EEPROM, the board doesn’t do
anything. Therefore, the first step is
to load a program into the EEPROM. Figure 7: Choose the serial port that corresponds to the ESP32 module.
There are several ways to do this, but
the easiest is by using the ESP32-Pico-Kit. Follow the steps below.
install a version before 3.0.0 (e.g. 2.0.17) because certain drivers
Prepare the board have been completely overhauled in version 3.0.0 (e.g., I²S, ADC,
> Plug the ESP32-Pico-Kit module on the main board with the USB and DAC). It will take a while before other libraries using these
connector pointing to the side and its antenna near the center of peripherals will have integrated the modifications. We have also
the main board. observed code bloating with applications based on version 3.0.x.
> Place a jumper on pins 2 and 3 of JP2 (Selfboot). that will no longer fit in the ESP32 module’s memory.
> A jumper must be placed on JP1 (DSP Clock), but its position > Once the Boards Package is installed, you should be able to
depends on the application. Pins 1 and 2 (X1) select the quartz select the ESP32 PICO-D4.
crystal X1. Use this position for applications that do not need > From the Tools menu, select the correct Port (Figure 7).
the ESP32 to clock the DSP (probably everything not using I²S > In the Arduino IDE, open the Library Manager (Tools menu →
communication between the DSP and the ESP32). JP1 position Manage Libraries…). Search for Elektor. You should find a library
2 and 3 (ext. MCLK) selects the ESP32’s MCLK signal as clock for named Elektor_AudioDSP (Figure 8). Install it. By default, the
the DSP. This is the required position when using I²S communica- most recent version will be installed. Normally, there is no reason
tion between the ESP32 and the DSP. to install an older version unless you want more bugs and fewer
> Connect the micro-USB port of the ESP32-Pico-Kit to a free USB options. The library can also be downloaded from GitHub at [4]
port on a computer. The power LED on the ESP32-Pico-Kit and installed manually.
should light up (red) and the computer should detect a new
serial port. If the port is not found, install the driver for the CP2101 Application Examples
USB-to-serial converter mounted on the ESP32-Pico-Kit. For You’re now ready to create and upload programs to the Audio DSP FX
details, please see [3]. Processor. To help you get started, the Elektor_AudioDSP library comes
with a collection of examples. Open an example by clicking Files →
Prepare your computer Examples and scrolling down to the section Examples from Custom
> Launch the Arduino IDE (this project was developed using IDE Libraries. Here you should see an entry for the Elektor_AudioDSP
version 1.8.19). library. Click on it and choose an example (Figure 9).
> From the Tools menu, select the Board ESP32 PICO-D4 (Figure 6).
If the ESP32 PICO-D4 isn’t listed in the Boards list, install the Note that entries with an arrow to the right (e.g., AudioTools) require
ESP32 Boards Package first. For details on how to do this, please a third-party library with the name of the entry. This means that the
refer to the tutorial at [2]. Note that it is highly recommended to examples in the AudioTools submenu require the library AudioTools.

November & December 2024 13


everything. Simply load a sketch and
upload it to the board. If the EEPROM
needs programming, the sketch will
do it automatically.

Impor tant : Please read the


comments at the top of an example
sketch as they contain information for
configuring the board!

Try an Example
Figure 8: Install the Elektor_AudioDSP library with the help of the Library Manager built in the Arduino IDE. To illustrate how to use an example,
let’s load sine_generator_adau1701.
After uploading this sketch to the
Some of these libraries can be installed through the IDE’s Library board, it will program the EEPROM (a.k.a. “E2Prom”) with the DSP
Manager as described above, but not all. The link to the library is algorithm i2s_pass_through_48000. Its name doesn’t show it, but this
included in the sketch. algorithm turns the DSP into a voltage-controlled sinewave generator
with its output on connector K4 (not K3). The oscillator’s frequency is
An example consists of an Arduino sketch and, in most cases, an controlled by P1, connected to the ESP32. In the main loop, the four
executable for the DSP to be loaded into the board’s EEPROM. The potentiometers are read, and their values are printed on the serial port.
comments at the top of the sketch tell you how to set the board’s These values are also sent as voltages to the control inputs of the DSP.
jumpers and how to use the example. The example takes care of After programming the EEPROM (this takes about one second), the

Figure 9: This is how you


access the examples
included in the Elektor_
AudioDSP library.

14 November & December 2024 www.elektormagazine.com


board’s LED will start to blink at a rate of 1 Hz. If you reset the sketch,
the EEPROM will not be programmed again (unless its contents are
different), and the LED starts to blink almost immediately after reset.

Here are the instructions (from the sketch) to make it all work:

> Set JP1 (DSP clock) to position X1 (pins 1 and 2)


> Set JP2 to position Selfboot (pins 2 and 3)
Figure 10:
> Use P5 to adjust TP1 to 3.15 V A SigmaStudio [5]
> Upload the sketch to the ESP32 program is actually a
> Wait for LED1 to start blinking at a rate of 1 Hz flow diagram.
> Connect headphones or an amplifier to K4 (not K3) and enjoy
> P1 controls frequency
A collection of precompiled DSP executables can be found in the
SigmaStudio Examples file adau1701_e2prom_collection.h included in the Elektor_AudioDSP
The examples that use a DSP program include the SigmaStudio [5] library. The SigmaStudio project files used to generate these execut-
project for it (Figure 10). After installing the Elektor_AudioDSP library, ables are in the extra folder of the library.
you can find the examples in:
Included are two generic executables that simply pass audio data from
[path-to-your-Arduino-folder]\sketchbook\libraries\ the ESP32 to the ADAU1701 using I²S: i2s_pass_through_44.1khz and
Elektor_AudioDSP\examples\ i2s_pass_through_48khz. The only difference between them is the

Visit us!
A4.242

VOX-POWER.COM
VOX-
Unique Power Solutions.

View our brochure

LET VOX POWER YOUR APPLICATION


4” 6” 6”
7” 5” 3”
4” 2” 7.43” 4.6”
4” 2” 1.61”
1” 1.61” 1.61”
1” 1.61”

300W 300W 300W 600W 600W 1200W


EIRE300 VCCS300 VCCR300 VCCM600 NEVO+600 NEVO+1200
AC/DC AC/DC DC/DC AC/DC AC/DC AC/DC
The EIRE300 is an open frame The VCCS300 is a scalable The VCCR300 is a robust and The VCCM600 conduction The NEVO+ modular and user-configurable series
power supply delivering 300 single output conduction highly reliable single output cooled modular power series is the smallest in their class and the ultimate power
Watts, and up to 375 Watts of cooled power supply. It is conduction cooled power combines the advantages of solution for demanding applications where size,
peak output power for 1 sec the ultimate power solution supply delivering up to 300 a configurable power supply power density and weight are vital factors. It offers
when fan cooled in a small 4” for Class I and II applications Watts in a compact 7.43” x with the high reliability of multiple output voltages and power options that
x 2” x 1” low profile footprint. where rugged reliability, high 4.6” package. Its unrivalled a fan-less architecture and can be configured in minutes to suit virtually any
With an unrivalled convection efficiency, silent operation 1” low profile, ensures easy offers unrivalled performance application. Customers can choose from a variety
rating of 200 Watts (115VAC), it and BF rating are important integration in virtually any and flexibility. The series of output modules to provide up to 16 isolated
is the ultimate power solution factors. The series delivers orientation, providing system delivers a silent 600 Watts, outputs to meet the exact requirement of the
for Class I and II applications 300 Watts of continuous designers great flexibility and and up to 750 Watts of peak application. The NEVO+600 delivers 600 Watts from
where reliability, high output power in a rugged space saving advantages. The output power for 5 seconds, a tiny 5” x 3” x 1.61” package weighing 600g and the
efficiency and BF rating are and miniature 4” x 2” x 1.61” series offers a wide DC input in a rugged 4” x 7” x 1.61” NEVO+1200 delivers 1200 Watts from a 6” x 6” x 1.61”
important factors. package. range of 33.6-160VDC . package. package weighing 1.2kg when fully configured.

November & December 2024 15


Figure 11: The Audio DSP FX Processor fits inside a Hammond 1593N-type Figure 12: The board with headers and potentiometers mounted.
enclosure. To allow closing the lid, the ESP32 module must be mounted
without headers.

sample rate. These two executables turn the DSP into a stereo audio
output on connector K3 (with a sine generator on connector K4). JP1 Related Products
must be in position ext. MCLK.
> Elektor Audio DSP FX Processor
To Be Continued… www.elektor.com/20895
That’s it for now. This article presented a lot of information and,
> Dogan & Ahmet Ibrahim, Practical Audio DSP Projects
hopefully, enough to get you started. In the next installment, we will with the ESP32, (Elektor, 2023)
go deeper into creating your own applications for the Audio DSP FX www.elektor.com/20558
Processor board.
230510-01 > ESP32-PICO-KIT
www.elektor.com/18423

Questions or Comments?
Do you have technical questions or comments about this article?
Email the author at [email protected], or contact Elektor
at [email protected].

About the Author


Clemens Valens started working for Elektor in 2008, and he has
held various positions since. Currently, he is part of the product
development team. His main interests in electronics are (digital)
signal processing and its applications in music production and
sound synthesis.

WEB LINKS
[1] R
 amkumar Ramaswamy, “ADAU1701 Universal Audio DSP Board,” Elektor 1-2/2014:
https://www.elektormagazine.com/magazine/elektor-201401/24348
[2] ESP32 FAQ, How-to & Getting Started: https://www.elektormagazine.com/esp32-faq
[3] CP210x USB to UART Bridge VCP Drivers: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
[4] The Elektor_AudioDSP library at GitHub: https://github.com/ClemensAtElektor/Elektor_AudioDSP
[5] Get SigmaStudio (not SigmaStudio +): https://www.analog.com/sigmastudio
[6] The Audio DSP FX Processor on Elektor Labs: https://www.elektormagazine.com/labs/audio-dsp-fx-processor

16 November & December 2024 www.elektormagazine.com


FRDM
Development
Boards

nxp.com/FRDM
NXP and the NXP logo are trademarks of NXP B.V. All other product or service names are the property of their respective owners. © 2024 NXP B.V.

November & December 2024 17

You might also like