Skip to content
todbotPublic

About

Pico/Pico2-based board for playing with synthesizers in CircuitPython

Topics

Resources

Stars

25 stars

Watchers

3 watching

Forks

Latest commit

 

History

106 Commits

Folders and files

Repository files navigation

synthiota

Pico/Pico2-based board for playing with synthesizers in CircuitPython.

synthiota_tbish2_demo0.mp4

Video demos:

Apps

Each app's folder has a README with its controls. To install, find the corresponding UF2 in the Releases section and copy the UF2 to the board in BOOT mode. Or look in the app's directory for how to install it.

CircuitPython, in circuitpython/:

  • polysynth -- two-oscillator subtractive polysynth. The pads are a chromatic keyboard and the pots edit 16 params over 2 pages.
  • wavesynth -- wavetable polysynth. The pads are a scale keyboard, with chords on the top row, and the pots edit 24 params over 3 pages.
  • swarmsynth -- Swarmatron-style drone: eight oscillators on one pitch, fanned apart by the right slider.
  • dronesynth -- eight drone oscillators, each tuned by its own knob, each with its own LFO.
  • dronesynth_wt -- dronesynth with each oscillator at its own place in a shared wavetable.
  • tbish2 -- TB-303-style acid bassline with a 16-step sequencer you can edit on the board.
  • tbish -- the original TB-303-style synth, a technology demo with no pattern editing or MIDI in.
  • hwtest -- hardware bring-up tests and the reference pin setup.

Arduino, in arduino/:

  • wavesynth -- a Mozzi port of the CircuitPython wavesynth, in progress. It serves the CIRCUITPY drive over USB for wavetables and patches.
  • hwtest -- a board test, plus simple mono MIDI synths using M16 and Mozzi.

See Getting to BOOT mode via commandline for another way to install these apps.

Assembling

The PCBAs come with all SMD parts assembled. The components you will need to supply:

For the knobs, you can buy knobs off Amazon or you can 3d print them. Some 3D printable knobs I like are these 6mm Vintage Synth Knob.

PCM5102 DAC setup

Before soldering down the PCM5102 DAC, solder bridge the jumpers to be 1L/2L/3H/4L, as in this picture:

The PCM5102 DAC should have standard header pins soldered to it, on the 6-pin header row. For extra stability, you can also solder one of the G pins behind the audio jack.

More inforomation about the PCM5102 can be found in this blog post.

Header sockets and header pins

You will also need some headers and header sockets to attach the modules to the PCB. If using the enclosure, the top part expects the header arrangement to be:

  • Pico:
    • Short socket headers for Pico on synthiota board
    • Standard header pins on Pico (Pico H sold w/ these pins soldered)
  • OLED display:
    • Short socket headers for OLED display on synthio - Standard header pins on OLED display (usually sold w/ these pins soldered) ta board
  • PCM5102 I2S DAC
    • Standard header pins on PCM5102 I2S DAC board (usually sold w/ these pins soldered)
    • I2S DAC w/ header pins is soldered directly to the synthiota board, no socket

When soldering down the jacks and sockets, holding them in place with masking tape or blutack makes things easier. For the Pico header sockets, sticking them into a Pico and hold the Pico onto the board with masking tape or blutack can be helpful.

After soldering everything, the result will look like:

Pico pins used

CircuitPython naming. See hwtest/synth_setup_synthiota.py for how they're used.

Encoder

  • board.GP28 - encoder B pin
  • board.GP27 - encoder A pin

ADC input for pots

  • board.GP26 - ADC input for pot knobs

I2S DAC

  • board.GP22 - I2S DAT pin to PCM5102 DAC
  • board.GP21 - I2S LCK pin to PCM5102 DAC
  • board.GP20 - I2S BCK pin to PCM5102 DAC

Encoder switch

  • board.GP19 - encoder SW pin

NeoPixel LEDs

  • board.GP18 - NeoPixel LEDs pin

UART MIDI In/Out

  • board.GP17 - UART RX pin to MIDI input
  • board.GP16 - UART TX pin to MIDI output

SPI for display

  • board.GP13 - SPI DC for SH1106 display
  • board.GP12 - SPI RES for SH1106 display
  • board.GP11 - SPI MOSI for SH1106 display
  • board.GP10 - SPI SCK for SH1106 display

Pot mux select

  • board.GP9 - SEL A pin to 4051 mux for pot knobs
  • board.GP8 - SEL B pin to 4051 mux for pot knobs
  • board.GP7 - SEL C pin to 4051 mux for pot knobs

I2C for MPR121 touch sensors

  • board.GP3 - I2C SCL to MPR121 touch sensors
  • board.GP2 - I2C SDA to MPR121 touch sensors

Free pins: GP0,GP1, GP4,GP5,GP6, GP14,GP15. Feel free to use for other purposes.

Schematics

Getting to BOOT mode via commandline

If you don't want to hold the BOOT button down while powering on, you can usually get the synthiota board into BOOT mode via the commandline with:

PORT=/dev/cu.usbmodem21301   # the COM port of the Pico
python3 -c "import serial;serial.Serial('$PORT',1200).close()"

If you don't want to use Python, one of these should work:

stty -f $PORT 1200  # MacOS 
stty -F $PORT 1200  # Linux

To install a UF2 once in BOOT mode, you can do (this flashes and starts the program):

picotool load -x file.uf2

Or picotool reboot to reset board.

(if you need, pip3 install pyserial and brew install picotool)

(note most product links are Amazon affiliate links)

synthiota1_demo0.mp4

About

Pico/Pico2-based board for playing with synthesizers in CircuitPython

Topics

Resources

Stars

25 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages