#minidexed — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #minidexed, aggregated by home.social.
-
Превращаем MIDI клавиатуру в синтезатор. Часть 1. Железо
Все началось со статьи Как собрать клон Yamaha DX7 за 10$ . Так как я достаточно давно занимаюсь музыкой, и люблю конструировать всякие электронные штучки, меня эта статья заинтересовала. Я тут же начал прикидывать по цене возможные варианты. RPI2040 конечно же очень дешево, но посмотрев пару обзоров на Picodexed на YouTube, меня не привлекла простенькая синтезаторная составляющая. Понятно, что это полная эмуляция движка Yamaha DX7, но слишком уж звук невзрачный и простой. После просмотра вариантов эмуляторов синтезаторов на RPI на YouTube меня больше заинтересовали проекты MiniDexed , MT32-pi и Mini-JV880 .
https://habr.com/ru/articles/982570/
#синтезатор #midiконтроллеры #roland_mt32 #Roland_JV880 #Minidexed #dyi
-
Превращаем MIDI клавиатуру в синтезатор. Часть 1. Железо
Все началось со статьи Как собрать клон Yamaha DX7 за 10$ . Так как я достаточно давно занимаюсь музыкой, и люблю конструировать всякие электронные штучки, меня эта статья заинтересовала. Я тут же начал прикидывать по цене возможные варианты. RPI2040 конечно же очень дешево, но посмотрев пару обзоров на Picodexed на YouTube, меня не привлекла простенькая синтезаторная составляющая. Понятно, что это полная эмуляция движка Yamaha DX7, но слишком уж звук невзрачный и простой. После просмотра вариантов эмуляторов синтезаторов на RPI на YouTube меня больше заинтересовали проекты MiniDexed , MT32-pi и Mini-JV880 .
https://habr.com/ru/articles/982570/
#синтезатор #midiконтроллеры #roland_mt32 #Roland_JV880 #Minidexed #dyi
-
Превращаем MIDI клавиатуру в синтезатор. Часть 1. Железо
Все началось со статьи Как собрать клон Yamaha DX7 за 10$ . Так как я достаточно давно занимаюсь музыкой, и люблю конструировать всякие электронные штучки, меня эта статья заинтересовала. Я тут же начал прикидывать по цене возможные варианты. RPI2040 конечно же очень дешево, но посмотрев пару обзоров на Picodexed на YouTube, меня не привлекла простенькая синтезаторная составляющая. Понятно, что это полная эмуляция движка Yamaha DX7, но слишком уж звук невзрачный и простой. После просмотра вариантов эмуляторов синтезаторов на RPI на YouTube меня больше заинтересовали проекты MiniDexed , MT32-pi и Mini-JV880 .
https://habr.com/ru/articles/982570/
#синтезатор #midiконтроллеры #roland_mt32 #Roland_JV880 #Minidexed #dyi
-
Превращаем MIDI клавиатуру в синтезатор. Часть 1. Железо
Все началось со статьи Как собрать клон Yamaha DX7 за 10$ . Так как я достаточно давно занимаюсь музыкой, и люблю конструировать всякие электронные штучки, меня эта статья заинтересовала. Я тут же начал прикидывать по цене возможные варианты. RPI2040 конечно же очень дешево, но посмотрев пару обзоров на Picodexed на YouTube, меня не привлекла простенькая синтезаторная составляющая. Понятно, что это полная эмуляция движка Yamaha DX7, но слишком уж звук невзрачный и простой. После просмотра вариантов эмуляторов синтезаторов на RPI на YouTube меня больше заинтересовали проекты MiniDexed , MT32-pi и Mini-JV880 .
https://habr.com/ru/articles/982570/
#синтезатор #midiконтроллеры #roland_mt32 #Roland_JV880 #Minidexed #dyi
-
Nareszcie skończyłem budowę swojego #MiniDexed w pudełku po mydełku
-
Nareszcie skończyłem budowę swojego #MiniDexed w pudełku po mydełku
-
Nareszcie skończyłem budowę swojego #MiniDexed w pudełku po mydełku
-
Nareszcie skończyłem budowę swojego #MiniDexed w pudełku po mydełku
-
Nareszcie skończyłem budowę swojego #MiniDexed w pudełku po mydełku
-
I've posted an update to my MiniDexed SSD1306 based IO board for the Raspberry Pi.
https://diyelectromusic.com/2025/09/27/minidexed-raspberry-pi-io-board-v2-design/
-
I've posted an update to my MiniDexed SSD1306 based IO board for the Raspberry Pi.
https://diyelectromusic.com/2025/09/27/minidexed-raspberry-pi-io-board-v2-design/
-
I've posted an update to my MiniDexed SSD1306 based IO board for the Raspberry Pi.
https://diyelectromusic.com/2025/09/27/minidexed-raspberry-pi-io-board-v2-design/
-
I've posted an update to my MiniDexed SSD1306 based IO board for the Raspberry Pi.
https://diyelectromusic.com/2025/09/27/minidexed-raspberry-pi-io-board-v2-design/
-
I've posted an update to my MiniDexed SSD1306 based IO board for the Raspberry Pi.
https://diyelectromusic.com/2025/09/27/minidexed-raspberry-pi-io-board-v2-design/
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Build Guide
Here are the build notes for my MiniDexed Raspberry Pi IO Board V2 Design. The previous version can be found here:
- Version 1: MiniDexed Raspberry Pi IO Board.
- SSD1306 Version: MiniDexed Raspberry Pi IO Board – Part 2
- HD44780 Version: MiniDexed Raspberry Pi IO Board – Part 3
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to electronics and microcontrollers, see the Getting Started pages.
Bill of Materials
- MiniDexed SSD1306 IO Board V2 PCB (GitHub link below)
- 1x SSD1306 OLED 132×64 display, pin order SDA, SCL, VCC, GND (see notes below on voltage levels)
- 1x GY-PCM5102 module
- 1x H11L1 optoisolator
- 1x 1N4148 or 1N914 signal diode
- Resistors: 1x 220Ω, 1x 470Ω
- Capacitors: 3x 100nF, 5x 10nF
- EITHER: 2x 3.5mm stereo TRS sockets (see PCB and photos for footprints)
- OR:1x 3.5mm stereo TRS socket and 1 5-pin DIN socket (see PCB and photos for footprints)
- 2x tactile buttons: 6x6x12 mm (suggested, see notes)
- 1x switched rotary encoder (see PCB and photos for footprint)
- 1x 2×20 GPIO extended header socket
- Pin headers
- Optional: 1x 6 pin DIP socket
Some SSD1306 OLED displays require 3V supplies and some require 5V. This requires a 5V version, but then there might be issues interfacing it to a Raspberry Pi if the display doesn’t include level shifters for the I2C lines.
There is a detailed discussion of what to look out for here: MiniDexed Raspberry Pi IO Board – Part 2.
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Diode and resistors.
- DIP socket (if used) or optoisolator (if not).
- TRS socket(s).
- Disc capacitors.
- GY-PCM5102.
- 2×20 way extended GPIO header.
- OLED display (maybe – see notes).
- Tactile buttons.
- Rotary encoder.
- DIN socket (if used).
Here are some build photos and additional notes.
Normally I would recommend the use of a DIP socket to protect the chips used, but in this instance, if this board is to be used with a case it may be that a DIP socket raises the optoisolator too high.
For once, I opted to skip the use of the DIP socket and soldered the optoisolator directly to the PCB. But the photo below shows a build in progress using the socket.
The MIDI IN socket is a dual footprint TRS or DIN mount. I’m using TRS here, so that is soldered on at the same time as the other TRS socket. If using DIN, then that should probably be the last thing to be soldered.
Unlike the previous board, this one uses the audio output pins of the GY-PCM5102 module. The simplest way to mount the module is the fix the pins as shown below and then fit the module over the top.
Not all the pins need to be connected, but the photo shows the minimum number required and their position.
Warning: The GY-PCM5102 may require some solder jumpers setting prior to installation. Full details of what is required can be found on the Clumsy MIDI pages here (see the important note about the “DAC solder bridges”): https://github.com/gmcn42/clumsyMIDI.
I’m suggesting 12mm high 6x6mm tactile buttons (that is 12mm total height, so around 8mm button height) but the exact height will depend on the encoder used and where any case would sit height wise with the encoder, display and buttons accessible.
Although I’m not using the extended pins of an extended GPIO header, they are slightly taller than a non-extended header which is useful here. I’ve just cut off the excess pin lengths once fixed on. Being able to cut off the outer row of pins also makes soldering the inner row a bit easier.
I’ve used longer pins for the display which allows me to set the height to a suitable level to fit with the height of the encoder and buttons. I’ve soldered them to the PCB and will add the display and trim the pins down to size once I know how tall I want to make it.
Here is a side-on view. As just mentioned, I’ve soldered the long pins in place for the display but won’t solder the display itself in place until I know the exact height I’ll need. As can be seen below it is unlikely to need the full height of the longer pins.
The completed board looks something like this. There are optional pin headers for the two buttons either in addition to or instead of the buttons themselves, but I’m not using them here.
Testing
I recommend performing the general tests described here: PCBs.
PCB Errata
There are no known issues with this PCB at this time.
Enhancements:
- None
MiniDexed Configuration
The MiniDexed configuration is unchanged from the first version of the board. Details can be found here: MiniDexed Raspberry Pi IO Board – Part 2.
3D Printed Case
There is now a version of my MiniDexed 3D Printed Cases for this version of the PCB when fitted with the MIDI TRS socket and used with a RPi 3A+.
Closing Thoughts
I’m really pleased with this update. It already feels a lot slicker than the first version.
It remains to be seen if this is easier to design a case for, but at the very least, not having a large gap for a MIDI DIN socket I’m sure will be an improvement1
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
MiniDexed Raspberry Pi IO Board V2 Design
My two MiniDexed PCBs were some of the earliest ones I made and so I’ve wondered about revisiting them for a while now.
This is a respin of the SSD1306 version of the IO board that is, hopefully, slightly nicer to build a case around!
Here is the link to the original PCB: MiniDexed Raspberry Pi IO Board. There is the original version for the Raspberry Pi V1: MiniDexed Raspberry Pi V1 IO Board and scattered around the blog are boards for a Pi Zero, a RPi 400, a TX816 style device, a dual Pi version, and a version for a Pi5 that supports quad stereo audio output, among other things.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Basic Requirements
As a bare minimum I’m after a revision of the SSD1306 version of the board that is slightly more case-builder friendly than the original.
I’d also like to add or change the following:
- MIDI TRS.
- Better audio output socket.
- Fix the minor errata from the original board.
It still has to fit within a normal “HAT” type footprint for a Raspberry Pi as I’d like to be using it with a Pi 3A+ again.
I’d also like to arrange the connectors to be on the same side as much as possible.
The Circuit
This is the same schematic as before with the addition of a TRS audio output direct from the PCM5102 module. I’ve also fixed a few of the non-functional errata such as some erroneous component values.
The GPIO map remains unchanged, although “SELECT” is now labelled “BACK”:
PCB Design
I’ve updated the MIDI socket footprint to my dual DIN-TRS footprint. I’m probably going to use the TRS version myself, but it is nice to keep DIN as an option. I’ve had to move the buttons to allow for a second TRS socket for the audio output and have consequently moved the GY-PCM5102 module back away from the edge of the board.
With this arrangement all of the IO is now on the same side of the board apart from the RPi’s own USB (and ethernet if using a B+ version).
Getting the height of the components correct will be a bit fiddly as the display and buttons will be determined by the height of the encoder’s body.
As I keep forgetting which GPIO is used for what, I’ve added details on the underside of the PCB.
As the GY-PCM5102 has an analog GND to support the analog OUT, I thought it might be prudent to keep that part of the PCB GND isolated from the main digital areas. But I’ve also seen that two GND planes separated by a thin non-conducting strip also has another name – “antenna”…
This is where my experience meets peak ignorance, so I’ll have to see how it goes and if I end up reconnecting everything, then I’ll patch something through somehow
Closing Thoughts
Ultimately I won’t know if this is any easier to use than the V1 board until I start designing a new case. But the addition of MIDI TRS at least removes the need for accommodating a large DIN socket on the board and having all the connectors on the same side will be better I think.
I have wondered about a Pi Zero version that could have DIN sockets on the underside of the PCB, mirroring what I did for the HD44780 version of my original board.
I might still give that a try as that would make for quite a nice compact unit too.
Kevin
-
I'm making my own minidexed case. For a setup using a PCM5102A DAC, SSD1306 OLED, KY-040 encoder, 3 low profile key switches and TRS MIDI in. #synthdiy #electronics #minidexed #dx7
-
I'm making my own minidexed case. For a setup using a PCM5102A DAC, SSD1306 OLED, KY-040 encoder, 3 low profile key switches and TRS MIDI in. #synthdiy #electronics #minidexed #dx7
-
I'm making my own minidexed case. For a setup using a PCM5102A DAC, SSD1306 OLED, KY-040 encoder, 3 low profile key switches and TRS MIDI in. #synthdiy #electronics #minidexed #dx7
-
I'm making my own minidexed case. For a setup using a PCM5102A DAC, SSD1306 OLED, KY-040 encoder, 3 low profile key switches and TRS MIDI in. #synthdiy #electronics #minidexed #dx7
-
I'm making my own minidexed case. For a setup using a PCM5102A DAC, SSD1306 OLED, KY-040 encoder, 3 low profile key switches and TRS MIDI in. #synthdiy #electronics #minidexed #dx7
-
MiniDexed 3D Printed Cases
I’ve used my modular Raspberry Pi 2,3,4 A+/B+ Synth Case to create a variant for the two versions of my RPi Zero MiniDexed IO Board PCB Design. There is also now a version for my MiniDexed Raspberry Pi IO Board V2 Design too.
The OpenSCAD file should allow for a range of variants to be produced, but I’ve gone for the following:
- HD44780 PCB for Raspberry Pi 4
- SSD1306 PCB for Raspberry Pi 2B+, 3B+
- SSD1306 PCB for Raspberry Pi 3A+
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
OpenSCAD Design
This uses the core Raspberry Pi Case OpenSCAD module, but includes the details for the additional PCBs.
One thing I had to watch out for – the HD44780 version actually extends the whole box quite significantly past the end of the RPi, so this meant the following:
- I needed a way to extend the PCB and case within the original RPi module.
- I needed an option to not include a SD card cutout (as it would now be in the middle of the bottom panel).
- I had to support some components on the underside of the addon board that might extend past the original RPi circuit board (in my case the three MIDI DIN sockets).
This proved a little tricky, but I’ve managed to update the original module to allow the above.
The box height is now governed by the following:
- Thickness of the box – top and bottom (th).
- Padding around the Pi PCB in the z direction (pad.z).
- Thickness of the Pi PCB (board.z)
- Gap between the Pi PCB and the addon PCB (md_pad.z).
- Thickness of the addon PCB (md_board.z).
- Additional padding above the addon PCB (md_ext.z).
The md_ext parameter also allows the box to be extended in the x-direction (past the SD card) and y-direction (past the GPIO connector).
The addon board components are defined in a similar manner to the original RPi board definitions. There is a 4-element array detailing the original x,y,z position (with respect to the addon board itself), the original x,y,z dimensions, and then additional position and size parameters for the cutout for the component.
I’ve had to be somewhat conservative with the overall height of the box, aiming for something that is tall enough to encompass all components, but not so tall that the switch on the encoder won’t work!
In terms of the SSD1306 this means that the MIDI socket pokes out of the top slightly.
There is one additional “hack” for the HD44780 version. I’ve added two additional PCB supports to the base that reach up to the addon PCB. For some reason, I’ve not been able to calculate the height. They should be pad.z+board.z+md_pad.z, when assuming they start at the thickness of the outer box. But for some reason I always come up short. So I’ve just hacked on an additional 1mm.
SSD1306 Build V2
This is a version for the rebuild of my SSD1306 PCB as described here: MiniDexed Raspberry Pi IO Board V2 Build Guide. This only supports the MIDI TRS variant at this time.
The critical part of the PCB build is getting the height of the OLED display correct.
In terms of fixings, the following are required:
- 2x encoder nut and washers – one below the case and one above.
- 4x 6x6x12mm 2.5M mounting posts
- 4x 2.5M nuts
SSD1306 Build V1
Some decisions have to be made about the PCB when it is constructed. Namely, the OLED display will require extending somehow to meet the display. It may be that simply using a pin header socket raises the display enough. Some experimentation will be required.
It will also be necessary to extend the buttons up to meet the case. I estimate a 12mm button would do it, but some experimentation is required here too.
In my case I 3D printed a couple of extensions to use, which has the added advantage that the buttons will match the case.
Also required are some M2.5 12mm spacers (and nuts/washers to adjust) between the boards.
HD44780 Build
As already mentioned, I had to strike a balance between having a box tall enough to allow all the components to fit, but not so tall that the encoder didn’t poke through enough.
In the end my compromise was as follows:
- Use a pin header socket for the HD44780 display.
- Remove the plastic spacers from he HD44680 pins.
- Trim the pins down slightly.
This can be seen below.
Two sets of spacers are required:
- 15mm between RPi and the IO board.
- 10mm between the IO board and the display.
As the display headers have been slightly shortened, it may be necessary to adjust the retaining lugs on the rear of the display so that they avoid the optoisolator. This was only an issue for me as the optoisolator was in a DIP socket, so was a little higher than the other components.
Closing Thoughts
These PCBs weren’t particularly designed with a case in mind, and it has proved a little tricky to get something that seems to work.
The HD44780 is much more suited to a case like this, and it shows, but I think both are relatively credible options really.
Kevin
-
MiniDexed 3D Printed Cases
I’ve used my modular Raspberry Pi 2,3,4 A+/B+ Synth Case to create a variant for the two versions of my RPi Zero MiniDexed IO Board PCB Design. There is also now a version for my MiniDexed Raspberry Pi IO Board V2 Design too.
The OpenSCAD file should allow for a range of variants to be produced, but I’ve gone for the following:
- HD44780 PCB for Raspberry Pi 4
- SSD1306 PCB for Raspberry Pi 2B+, 3B+
- SSD1306 PCB for Raspberry Pi 3A+
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
OpenSCAD Design
This uses the core Raspberry Pi Case OpenSCAD module, but includes the details for the additional PCBs.
One thing I had to watch out for – the HD44780 version actually extends the whole box quite significantly past the end of the RPi, so this meant the following:
- I needed a way to extend the PCB and case within the original RPi module.
- I needed an option to not include a SD card cutout (as it would now be in the middle of the bottom panel).
- I had to support some components on the underside of the addon board that might extend past the original RPi circuit board (in my case the three MIDI DIN sockets).
This proved a little tricky, but I’ve managed to update the original module to allow the above.
The box height is now governed by the following:
- Thickness of the box – top and bottom (th).
- Padding around the Pi PCB in the z direction (pad.z).
- Thickness of the Pi PCB (board.z)
- Gap between the Pi PCB and the addon PCB (md_pad.z).
- Thickness of the addon PCB (md_board.z).
- Additional padding above the addon PCB (md_ext.z).
The md_ext parameter also allows the box to be extended in the x-direction (past the SD card) and y-direction (past the GPIO connector).
The addon board components are defined in a similar manner to the original RPi board definitions. There is a 4-element array detailing the original x,y,z position (with respect to the addon board itself), the original x,y,z dimensions, and then additional position and size parameters for the cutout for the component.
I’ve had to be somewhat conservative with the overall height of the box, aiming for something that is tall enough to encompass all components, but not so tall that the switch on the encoder won’t work!
In terms of the SSD1306 this means that the MIDI socket pokes out of the top slightly.
There is one additional “hack” for the HD44780 version. I’ve added two additional PCB supports to the base that reach up to the addon PCB. For some reason, I’ve not been able to calculate the height. They should be pad.z+board.z+md_pad.z, when assuming they start at the thickness of the outer box. But for some reason I always come up short. So I’ve just hacked on an additional 1mm.
SSD1306 Build V2
This is a version for the rebuild of my SSD1306 PCB as described here: MiniDexed Raspberry Pi IO Board V2 Build Guide. This only supports the MIDI TRS variant at this time.
The critical part of the PCB build is getting the height of the OLED display correct.
In terms of fixings, the following are required:
- 2x encoder nut and washers – one below the case and one above.
- 4x 6x6x12mm 2.5M mounting posts
- 4x 2.5M nuts
SSD1306 Build V1
Some decisions have to be made about the PCB when it is constructed. Namely, the OLED display will require extending somehow to meet the display. It may be that simply using a pin header socket raises the display enough. Some experimentation will be required.
It will also be necessary to extend the buttons up to meet the case. I estimate a 12mm button would do it, but some experimentation is required here too.
In my case I 3D printed a couple of extensions to use, which has the added advantage that the buttons will match the case.
Also required are some M2.5 12mm spacers (and nuts/washers to adjust) between the boards.
HD44780 Build
As already mentioned, I had to strike a balance between having a box tall enough to allow all the components to fit, but not so tall that the encoder didn’t poke through enough.
In the end my compromise was as follows:
- Use a pin header socket for the HD44780 display.
- Remove the plastic spacers from he HD44680 pins.
- Trim the pins down slightly.
This can be seen below.
Two sets of spacers are required:
- 15mm between RPi and the IO board.
- 10mm between the IO board and the display.
As the display headers have been slightly shortened, it may be necessary to adjust the retaining lugs on the rear of the display so that they avoid the optoisolator. This was only an issue for me as the optoisolator was in a DIP socket, so was a little higher than the other components.
Closing Thoughts
These PCBs weren’t particularly designed with a case in mind, and it has proved a little tricky to get something that seems to work.
The HD44780 is much more suited to a case like this, and it shows, but I think both are relatively credible options really.
Kevin
-
MiniDexed 3D Printed Cases
I’ve used my modular Raspberry Pi 2,3,4 A+/B+ Synth Case to create a variant for the two versions of my RPi Zero MiniDexed IO Board PCB Design. There is also now a version for my MiniDexed Raspberry Pi IO Board V2 Design too.
The OpenSCAD file should allow for a range of variants to be produced, but I’ve gone for the following:
- HD44780 PCB for Raspberry Pi 4
- SSD1306 PCB for Raspberry Pi 2B+, 3B+
- SSD1306 PCB for Raspberry Pi 3A+
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
OpenSCAD Design
This uses the core Raspberry Pi Case OpenSCAD module, but includes the details for the additional PCBs.
One thing I had to watch out for – the HD44780 version actually extends the whole box quite significantly past the end of the RPi, so this meant the following:
- I needed a way to extend the PCB and case within the original RPi module.
- I needed an option to not include a SD card cutout (as it would now be in the middle of the bottom panel).
- I had to support some components on the underside of the addon board that might extend past the original RPi circuit board (in my case the three MIDI DIN sockets).
This proved a little tricky, but I’ve managed to update the original module to allow the above.
The box height is now governed by the following:
- Thickness of the box – top and bottom (th).
- Padding around the Pi PCB in the z direction (pad.z).
- Thickness of the Pi PCB (board.z)
- Gap between the Pi PCB and the addon PCB (md_pad.z).
- Thickness of the addon PCB (md_board.z).
- Additional padding above the addon PCB (md_ext.z).
The md_ext parameter also allows the box to be extended in the x-direction (past the SD card) and y-direction (past the GPIO connector).
The addon board components are defined in a similar manner to the original RPi board definitions. There is a 4-element array detailing the original x,y,z position (with respect to the addon board itself), the original x,y,z dimensions, and then additional position and size parameters for the cutout for the component.
I’ve had to be somewhat conservative with the overall height of the box, aiming for something that is tall enough to encompass all components, but not so tall that the switch on the encoder won’t work!
In terms of the SSD1306 this means that the MIDI socket pokes out of the top slightly.
There is one additional “hack” for the HD44780 version. I’ve added two additional PCB supports to the base that reach up to the addon PCB. For some reason, I’ve not been able to calculate the height. They should be pad.z+board.z+md_pad.z, when assuming they start at the thickness of the outer box. But for some reason I always come up short. So I’ve just hacked on an additional 1mm.
SSD1306 Build V2
This is a version for the rebuild of my SSD1306 PCB as described here: MiniDexed Raspberry Pi IO Board V2 Build Guide. This only supports the MIDI TRS variant at this time.
The critical part of the PCB build is getting the height of the OLED display correct.
In terms of fixings, the following are required:
- 2x encoder nut and washers – one below the case and one above.
- 4x 6x6x12mm 2.5M mounting posts
- 4x 2.5M nuts
SSD1306 Build V1
Some decisions have to be made about the PCB when it is constructed. Namely, the OLED display will require extending somehow to meet the display. It may be that simply using a pin header socket raises the display enough. Some experimentation will be required.
It will also be necessary to extend the buttons up to meet the case. I estimate a 12mm button would do it, but some experimentation is required here too.
In my case I 3D printed a couple of extensions to use, which has the added advantage that the buttons will match the case.
Also required are some M2.5 12mm spacers (and nuts/washers to adjust) between the boards.
HD44780 Build
As already mentioned, I had to strike a balance between having a box tall enough to allow all the components to fit, but not so tall that the encoder didn’t poke through enough.
In the end my compromise was as follows:
- Use a pin header socket for the HD44780 display.
- Remove the plastic spacers from he HD44680 pins.
- Trim the pins down slightly.
This can be seen below.
Two sets of spacers are required:
- 15mm between RPi and the IO board.
- 10mm between the IO board and the display.
As the display headers have been slightly shortened, it may be necessary to adjust the retaining lugs on the rear of the display so that they avoid the optoisolator. This was only an issue for me as the optoisolator was in a DIP socket, so was a little higher than the other components.
Closing Thoughts
These PCBs weren’t particularly designed with a case in mind, and it has proved a little tricky to get something that seems to work.
The HD44780 is much more suited to a case like this, and it shows, but I think both are relatively credible options really.
Kevin
-
picoDexed + MiniDexed EuroRack
Since attempting my picoDexed + StackyPi + MiniDexed EuroRack build and failing, I’ve found another Pico-to-Zero board that is provided as open source, so I’ve had some made.
This post details how to get that running with my MiniDexed Zero Eurorack module.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
As mentioned last time I found a number of options for a RP2040 based dev board in a Raspberry Pi Zero form factor. But this post is about this one:
It is fairly simple to build. It just requires a Pico and GPIO header pins.
There is an option for pull-ups on the I2C bus, but I’ve not bothered with them here. There is also a breakout header for a reset switch if required (it will support two sizes of switch by the looks of things).
Mapping over to MiniDexed/RPi Zero
The pinout is slightly different to the Stacky-pi, so here is an updated table of the GPIO mappings and which are required to be used with my MiniDexed board.
RP2040UseRPiRpiUseRP20403V35VGP2LCD SDAGP2 SDA5VGP3LCD SCLGP3 SCLGNDGP4GP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP5GP17GP18I2S BCLKGP18GP6GP27GNDGP7GP22GP23GP83V3GP24GP28GP11RE BGP10 MOSIGNDGP12RE AGP9 MISOGP25GP27GP10RE SWGP11 SCLKGP8GP9GNDGP7GP26ID_SDID_SCGP22SW BACKGP5GNDGP13SW HOMEGP6GP12GP21GP14GP13GNDGP19I2S LCLKGP19GP16GP20GP15GP26GP20GP17GNDGP21I2S DATAGP16The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP11 and 12.
The I2S interface might be ok – with a BCLK on GP18, it will be expecting LCLK on GP19. Data on GP21 should be ok.
Unlike the previous attempt, I’m hopeful I can just get this running ok with the correct pin mappings…
Changing I2C Bus and UARTs
Unlike the first attempt, I2C is mapped onto GP2 and GP3 which is what I was using in the original picoDexed. So that is all fine, multiplexed onto the I2C bus 1.
There is an issue with the UART however as picoDexed uses the following by default:
- UART 0 – GP 0,1 – Serial debug
- UART 1 – GP 4,5 – MIDI
I can swap these over so that UART0 (GP0,1) is MIDI, but that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 16
#define I2S_BCLK_PIN 18
#define I2S_LRCLK_PIN 19 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 1
#define DISPLAY_I2C_SDA 2
#define DISPLAY_I2C_SCL 3
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 11
#define ENCODER_B_PIN 12 // Not used
#define ENCODER_SW_PIN 10 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9I’ve added a separate configuration file (config-ER.h) in the repository to allow this version to be built, but the CMakelists.txt change above has not been included.
I’ve also added a picodexed-v0.03-ER.uf2 file in the build area which can be downloaded and installed directly onto the Pico to provide the above configuration ready to go.
Bringing it all together…
The nice thing about this PCB is that I can map everything nicely over to the pinouts used with my MiniDexed EuroRack PCB meaning that once the Pico has the custom firmware installed, it will just plug in and work and no hardware changes or patching is required at all!
I was slightly concerned that the USB port of the Pico might clash with the two installed electrolytic capacitors on the MiniDexed PCB, but in my case I can just about get away with it!
Here is the final assembled unit.
Closing Thoughts
I finally have my Eurorack picoDexed which is pretty neat. Big thanks to bablokb for putting that PCB up online. That saved me a job. And it was particularly nice that things like assuming consecutive pins for the I2S mapping was included as that made using the PIO I2S code a lot easier.
I’d like to see what the power usage is like now as I’m really after a lower power Dexed engine compared to the full Zero version.
Naturally at some point I might still make my own picoDexed Eurorack PCB, but this is a pretty good solution as far as I’m concerned, so that wouldn’t really add much for me now.
Kevin
-
picoDexed + MiniDexed EuroRack
Since attempting my picoDexed + StackyPi + MiniDexed EuroRack build and failing, I’ve found another Pico-to-Zero board that is provided as open source, so I’ve had some made.
This post details how to get that running with my MiniDexed Zero Eurorack module.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
As mentioned last time I found a number of options for a RP2040 based dev board in a Raspberry Pi Zero form factor. But this post is about this one:
It is fairly simple to build. It just requires a Pico and GPIO header pins.
There is an option for pull-ups on the I2C bus, but I’ve not bothered with them here. There is also a breakout header for a reset switch if required (it will support two sizes of switch by the looks of things).
Mapping over to MiniDexed/RPi Zero
The pinout is slightly different to the Stacky-pi, so here is an updated table of the GPIO mappings and which are required to be used with my MiniDexed board.
RP2040UseRPiRpiUseRP20403V35VGP2LCD SDAGP2 SDA5VGP3LCD SCLGP3 SCLGNDGP4GP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP5GP17GP18I2S BCLKGP18GP6GP27GNDGP7GP22GP23GP83V3GP24GP28GP11RE BGP10 MOSIGNDGP12RE AGP9 MISOGP25GP27GP10RE SWGP11 SCLKGP8GP9GNDGP7GP26ID_SDID_SCGP22SW BACKGP5GNDGP13SW HOMEGP6GP12GP21GP14GP13GNDGP19I2S LCLKGP19GP16GP20GP15GP26GP20GP17GNDGP21I2S DATAGP16The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP11 and 12.
The I2S interface might be ok – with a BCLK on GP18, it will be expecting LCLK on GP19. Data on GP21 should be ok.
Unlike the previous attempt, I’m hopeful I can just get this running ok with the correct pin mappings…
Changing I2C Bus and UARTs
Unlike the first attempt, I2C is mapped onto GP2 and GP3 which is what I was using in the original picoDexed. So that is all fine, multiplexed onto the I2C bus 1.
There is an issue with the UART however as picoDexed uses the following by default:
- UART 0 – GP 0,1 – Serial debug
- UART 1 – GP 4,5 – MIDI
I can swap these over so that UART0 (GP0,1) is MIDI, but that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 16
#define I2S_BCLK_PIN 18
#define I2S_LRCLK_PIN 19 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 1
#define DISPLAY_I2C_SDA 2
#define DISPLAY_I2C_SCL 3
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 11
#define ENCODER_B_PIN 12 // Not used
#define ENCODER_SW_PIN 10 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9I’ve added a separate configuration file (config-ER.h) in the repository to allow this version to be built, but the CMakelists.txt change above has not been included.
I’ve also added a picodexed-v0.03-ER.uf2 file in the build area which can be downloaded and installed directly onto the Pico to provide the above configuration ready to go.
Bringing it all together…
The nice thing about this PCB is that I can map everything nicely over to the pinouts used with my MiniDexed EuroRack PCB meaning that once the Pico has the custom firmware installed, it will just plug in and work and no hardware changes or patching is required at all!
I was slightly concerned that the USB port of the Pico might clash with the two installed electrolytic capacitors on the MiniDexed PCB, but in my case I can just about get away with it!
Here is the final assembled unit.
Closing Thoughts
I finally have my Eurorack picoDexed which is pretty neat. Big thanks to bablokb for putting that PCB up online. That saved me a job. And it was particularly nice that things like assuming consecutive pins for the I2S mapping was included as that made using the PIO I2S code a lot easier.
I’d like to see what the power usage is like now as I’m really after a lower power Dexed engine compared to the full Zero version.
Naturally at some point I might still make my own picoDexed Eurorack PCB, but this is a pretty good solution as far as I’m concerned, so that wouldn’t really add much for me now.
Kevin
-
picoDexed + MiniDexed EuroRack
Since attempting my picoDexed + StackyPi + MiniDexed EuroRack build and failing, I’ve found another Pico-to-Zero board that is provided as open source, so I’ve had some made.
This post details how to get that running with my MiniDexed Zero Eurorack module.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
As mentioned last time I found a number of options for a RP2040 based dev board in a Raspberry Pi Zero form factor. But this post is about this one:
It is fairly simple to build. It just requires a Pico and GPIO header pins.
There is an option for pull-ups on the I2C bus, but I’ve not bothered with them here. There is also a breakout header for a reset switch if required (it will support two sizes of switch by the looks of things).
Mapping over to MiniDexed/RPi Zero
The pinout is slightly different to the Stacky-pi, so here is an updated table of the GPIO mappings and which are required to be used with my MiniDexed board.
RP2040UseRPiRpiUseRP20403V35VGP2LCD SDAGP2 SDA5VGP3LCD SCLGP3 SCLGNDGP4GP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP5GP17GP18I2S BCLKGP18GP6GP27GNDGP7GP22GP23GP83V3GP24GP28GP11RE BGP10 MOSIGNDGP12RE AGP9 MISOGP25GP27GP10RE SWGP11 SCLKGP8GP9GNDGP7GP26ID_SDID_SCGP22SW BACKGP5GNDGP13SW HOMEGP6GP12GP21GP14GP13GNDGP19I2S LCLKGP19GP16GP20GP15GP26GP20GP17GNDGP21I2S DATAGP16The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP11 and 12.
The I2S interface might be ok – with a BCLK on GP18, it will be expecting LCLK on GP19. Data on GP21 should be ok.
Unlike the previous attempt, I’m hopeful I can just get this running ok with the correct pin mappings…
Changing I2C Bus and UARTs
Unlike the first attempt, I2C is mapped onto GP2 and GP3 which is what I was using in the original picoDexed. So that is all fine, multiplexed onto the I2C bus 1.
There is an issue with the UART however as picoDexed uses the following by default:
- UART 0 – GP 0,1 – Serial debug
- UART 1 – GP 4,5 – MIDI
I can swap these over so that UART0 (GP0,1) is MIDI, but that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 16
#define I2S_BCLK_PIN 18
#define I2S_LRCLK_PIN 19 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 1
#define DISPLAY_I2C_SDA 2
#define DISPLAY_I2C_SCL 3
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 11
#define ENCODER_B_PIN 12 // Not used
#define ENCODER_SW_PIN 10 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9I’ve added a separate configuration file (config-ER.h) in the repository to allow this version to be built, but the CMakelists.txt change above has not been included.
I’ve also added a picodexed-v0.03-ER.uf2 file in the build area which can be downloaded and installed directly onto the Pico to provide the above configuration ready to go.
Bringing it all together…
The nice thing about this PCB is that I can map everything nicely over to the pinouts used with my MiniDexed EuroRack PCB meaning that once the Pico has the custom firmware installed, it will just plug in and work and no hardware changes or patching is required at all!
I was slightly concerned that the USB port of the Pico might clash with the two installed electrolytic capacitors on the MiniDexed PCB, but in my case I can just about get away with it!
Here is the final assembled unit.
Closing Thoughts
I finally have my Eurorack picoDexed which is pretty neat. Big thanks to bablokb for putting that PCB up online. That saved me a job. And it was particularly nice that things like assuming consecutive pins for the I2S mapping was included as that made using the PIO I2S code a lot easier.
I’d like to see what the power usage is like now as I’m really after a lower power Dexed engine compared to the full Zero version.
Naturally at some point I might still make my own picoDexed Eurorack PCB, but this is a pretty good solution as far as I’m concerned, so that wouldn’t really add much for me now.
Kevin
-
picoDexed + MiniDexed EuroRack
Since attempting my picoDexed + StackyPi + MiniDexed EuroRack build and failing, I’ve found another Pico-to-Zero board that is provided as open source, so I’ve had some made.
This post details how to get that running with my MiniDexed Zero Eurorack module.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
As mentioned last time I found a number of options for a RP2040 based dev board in a Raspberry Pi Zero form factor. But this post is about this one:
It is fairly simple to build. It just requires a Pico and GPIO header pins.
There is an option for pull-ups on the I2C bus, but I’ve not bothered with them here. There is also a breakout header for a reset switch if required (it will support two sizes of switch by the looks of things).
Mapping over to MiniDexed/RPi Zero
The pinout is slightly different to the Stacky-pi, so here is an updated table of the GPIO mappings and which are required to be used with my MiniDexed board.
RP2040UseRPiRpiUseRP20403V35VGP2LCD SDAGP2 SDA5VGP3LCD SCLGP3 SCLGNDGP4GP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP5GP17GP18I2S BCLKGP18GP6GP27GNDGP7GP22GP23GP83V3GP24GP28GP11RE BGP10 MOSIGNDGP12RE AGP9 MISOGP25GP27GP10RE SWGP11 SCLKGP8GP9GNDGP7GP26ID_SDID_SCGP22SW BACKGP5GNDGP13SW HOMEGP6GP12GP21GP14GP13GNDGP19I2S LCLKGP19GP16GP20GP15GP26GP20GP17GNDGP21I2S DATAGP16The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP11 and 12.
The I2S interface might be ok – with a BCLK on GP18, it will be expecting LCLK on GP19. Data on GP21 should be ok.
Unlike the previous attempt, I’m hopeful I can just get this running ok with the correct pin mappings…
Changing I2C Bus and UARTs
Unlike the first attempt, I2C is mapped onto GP2 and GP3 which is what I was using in the original picoDexed. So that is all fine, multiplexed onto the I2C bus 1.
There is an issue with the UART however as picoDexed uses the following by default:
- UART 0 – GP 0,1 – Serial debug
- UART 1 – GP 4,5 – MIDI
I can swap these over so that UART0 (GP0,1) is MIDI, but that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 16
#define I2S_BCLK_PIN 18
#define I2S_LRCLK_PIN 19 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 1
#define DISPLAY_I2C_SDA 2
#define DISPLAY_I2C_SCL 3
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 11
#define ENCODER_B_PIN 12 // Not used
#define ENCODER_SW_PIN 10 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9I’ve added a separate configuration file (config-ER.h) in the repository to allow this version to be built, but the CMakelists.txt change above has not been included.
I’ve also added a picodexed-v0.03-ER.uf2 file in the build area which can be downloaded and installed directly onto the Pico to provide the above configuration ready to go.
Bringing it all together…
The nice thing about this PCB is that I can map everything nicely over to the pinouts used with my MiniDexed EuroRack PCB meaning that once the Pico has the custom firmware installed, it will just plug in and work and no hardware changes or patching is required at all!
I was slightly concerned that the USB port of the Pico might clash with the two installed electrolytic capacitors on the MiniDexed PCB, but in my case I can just about get away with it!
Here is the final assembled unit.
Closing Thoughts
I finally have my Eurorack picoDexed which is pretty neat. Big thanks to bablokb for putting that PCB up online. That saved me a job. And it was particularly nice that things like assuming consecutive pins for the I2S mapping was included as that made using the PIO I2S code a lot easier.
I’d like to see what the power usage is like now as I’m really after a lower power Dexed engine compared to the full Zero version.
Naturally at some point I might still make my own picoDexed Eurorack PCB, but this is a pretty good solution as far as I’m concerned, so that wouldn’t really add much for me now.
Kevin
-
picoDexed + MiniDexed EuroRack
Since attempting my picoDexed + StackyPi + MiniDexed EuroRack build and failing, I’ve found another Pico-to-Zero board that is provided as open source, so I’ve had some made.
This post details how to get that running with my MiniDexed Zero Eurorack module.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
As mentioned last time I found a number of options for a RP2040 based dev board in a Raspberry Pi Zero form factor. But this post is about this one:
It is fairly simple to build. It just requires a Pico and GPIO header pins.
There is an option for pull-ups on the I2C bus, but I’ve not bothered with them here. There is also a breakout header for a reset switch if required (it will support two sizes of switch by the looks of things).
Mapping over to MiniDexed/RPi Zero
The pinout is slightly different to the Stacky-pi, so here is an updated table of the GPIO mappings and which are required to be used with my MiniDexed board.
RP2040UseRPiRpiUseRP20403V35VGP2LCD SDAGP2 SDA5VGP3LCD SCLGP3 SCLGNDGP4GP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP5GP17GP18I2S BCLKGP18GP6GP27GNDGP7GP22GP23GP83V3GP24GP28GP11RE BGP10 MOSIGNDGP12RE AGP9 MISOGP25GP27GP10RE SWGP11 SCLKGP8GP9GNDGP7GP26ID_SDID_SCGP22SW BACKGP5GNDGP13SW HOMEGP6GP12GP21GP14GP13GNDGP19I2S LCLKGP19GP16GP20GP15GP26GP20GP17GNDGP21I2S DATAGP16The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP11 and 12.
The I2S interface might be ok – with a BCLK on GP18, it will be expecting LCLK on GP19. Data on GP21 should be ok.
Unlike the previous attempt, I’m hopeful I can just get this running ok with the correct pin mappings…
Changing I2C Bus and UARTs
Unlike the first attempt, I2C is mapped onto GP2 and GP3 which is what I was using in the original picoDexed. So that is all fine, multiplexed onto the I2C bus 1.
There is an issue with the UART however as picoDexed uses the following by default:
- UART 0 – GP 0,1 – Serial debug
- UART 1 – GP 4,5 – MIDI
I can swap these over so that UART0 (GP0,1) is MIDI, but that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 16
#define I2S_BCLK_PIN 18
#define I2S_LRCLK_PIN 19 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 1
#define DISPLAY_I2C_SDA 2
#define DISPLAY_I2C_SCL 3
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 11
#define ENCODER_B_PIN 12 // Not used
#define ENCODER_SW_PIN 10 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9I’ve added a separate configuration file (config-ER.h) in the repository to allow this version to be built, but the CMakelists.txt change above has not been included.
I’ve also added a picodexed-v0.03-ER.uf2 file in the build area which can be downloaded and installed directly onto the Pico to provide the above configuration ready to go.
Bringing it all together…
The nice thing about this PCB is that I can map everything nicely over to the pinouts used with my MiniDexed EuroRack PCB meaning that once the Pico has the custom firmware installed, it will just plug in and work and no hardware changes or patching is required at all!
I was slightly concerned that the USB port of the Pico might clash with the two installed electrolytic capacitors on the MiniDexed PCB, but in my case I can just about get away with it!
Here is the final assembled unit.
Closing Thoughts
I finally have my Eurorack picoDexed which is pretty neat. Big thanks to bablokb for putting that PCB up online. That saved me a job. And it was particularly nice that things like assuming consecutive pins for the I2S mapping was included as that made using the PIO I2S code a lot easier.
I’d like to see what the power usage is like now as I’m really after a lower power Dexed engine compared to the full Zero version.
Naturally at some point I might still make my own picoDexed Eurorack PCB, but this is a pretty good solution as far as I’m concerned, so that wouldn’t really add much for me now.
Kevin
-
picoDexed + StackyPi + MiniDexed EuroRack
Now that I have a picoDexed with a display an encoder it is very tempting to create a version of my MiniDexed EuroRack PCB for it.
But as a short diversion, there is another possibility – can I use a RP2040 that is already in a Pi Zero form factor with my existing MiniDexed EuroRack PCB Design?
Spoilers: The answer, it turns out, is no. Something is not quite letting this work for me – it’s close, but I’m just not there yet. Here is another attempt where it works: picoDexed + MiniDexed EuroRack.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
I’m aware of a couple of products that were available to put a RP2040 into a Raspberry Pi Zero form factor:
- Red Robots Pico to Zero adaptor.
- Stacky-Pi by SB Components.
- Waveshare RP2040 PiZero.
- Pico to Pi HAT.
- Update: I’ve just found the following open source design: https://github.com/bablokb/pcb-pico-pi-base – details of how I’ve used this can be found here: picoDexed + MiniDexed EuroRack
The first two were available on Tindie and other places, and as far as I can see, both appear to use the same mapping of RP2040 GPIO to RPi 40-pin header. The Red Robot board doesn’t seem to be available anymore, and whilst there are a few Stacky-Pis on Tindie, in most places it seems to be discontinued.
I don’t know anything about the Waveshare or Pico to Pi, but might grab myself one of each.
I’ll give the open source design a try (and possibly save me designing my own…).
As can be seen above, the Red Robots board is designed to take an actual Pico, whereas the Stacky-Pi is its own board with an on-board RP2040.
Mapping over to MiniDexed/RPi Zero
The following table lists the RPi GPIO connections I used in my MiniDexed board and how they map onto the RP2040 using the above boards.
RP2040UseRPiRpiUseRP20403V35VGP20LCD SDAGP2 SDA5VGP21LCD SCLGP3 SCLGNDGP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP17GP18I2S BCLKGP28GP27GNDGP22GP233V3GP24GP3RE BGP10 MOSIGNDGP4RE AGP9 MISOGP25GP2RE SWGP11 SCLKGP8GNDGP7ID_SDID_SCGP10SW BACKGP5GNDGP11SW HOMEGP6GP12GP12GP13GNDGP13I2S LCLKGP19GP16GP26GP20GNDGP21I2S DATAGP15The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP3 and 4.
The I2S interface is going to be tricky, as with a BCLK on GP28, it will be expecting LCLK on GP29 rather than the GP13 it is currently routed to on the board. Quite apart from the fact that GP29 isn’t even broken out on a Pico.
The obvious thing to explore is if the BCLK connection can be routed through to GP13 on the RPi header, or GP12 for the RP2040. That would be handy if so.
Connecting into GP13 should be possible as this pin is currently unconnected on the MiniDexed PCB. It will involve cutting a track however for GP18. The existing track and its new destination is highlighted below in blue.
Changing I2C Bus and UARTs
There is one other complication however. The picoDexed configuration has the ssd1306 connected to GP2 and GP3 which are multiplexed onto the I2C bus 1.
The adaptor configuration maps SDA/SCL onto GP20/21 which are multiplexed onto I2C bus 0. I updated the code to support changing I2C bus in addition to changing IO pins. Arguably, I should probably have supported this in the first place anyway…
A similar issue exists for the UART, but unfortunately that isn’t quite so easy to change.
I can take a similar approach to the above for the Serial MIDI link – allowing it to use either UART0 or UART1.
But that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 15
#define I2S_BCLK_PIN 12
#define I2S_LRCLK_PIN 13 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 0
#define DISPLAY_I2C_SDA 20
#define DISPLAY_I2C_SCL 21
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 3
#define ENCODER_B_PIN 4 // Not used
#define ENCODER_SW_PIN 2 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9Bringing it all together…
I decided to hack on my (already pretty hacked) prototype MiniDexed EuroRack board and cut and patch the trace to the DAC as described above.
The complication being the GPIO header pin I need to get to is under the OLED display, but I could just about do it – see below.
It doesn’t work. Unfortunately.
First of, I have to say, I’ve not found the Stacky-Pi particularly reliable. It took me ages to get it to successfully boot up into accepting a uf2 file, and once installed, I was struggling to get it to reliably boot and run.
Weirdly it seems to work best when I have a finger on the flash chip which seems to imply some board layout/grounding/stability issues to me…
From what I can see, the display, MIDI, serial debug and encoder are working fine though once it does get up and running.
But I just can’t get any reliable sound out of the thing at all. I managed sound once, but that was it. It is all quiet unreliable for me – far too unreliable to be useful.
Shame, as it actually looks really cool!
Closing Thoughts
It has been a frustrating afternoon. I’m having to leave this one here for now as there are just too many unknowns at the moment to really get to the bottom of what is going on.
I thought the Stacky-Pi would be a quick and easy fix, but haven’t ever used them before, and the fact that they are discontinued and there is very little information that I can find online about them makes me think perhaps they aren’t worth persevering with.
So I have a number of options now:
- Try a Waveshare RP2040 PiZero. As there are a lot more peripherals, I’m not sure how much what I’m doing will translate across, to be honest, it cost wise, it’s essentially the same as a Zero itself, which I know “just works”.
- Do I design my own Pico to RPI GPIO converter board to let me use that with my existing MiniDexed EuroRack design? Tempting and probably not that hard.
- Update: I’ve since found (and ordered) https://github.com/bablokb/pcb-pico-pi-base
- Update 2: And it works! picoDexed + MiniDexed EuroRack
- Update: I’ve since found (and ordered) https://github.com/bablokb/pcb-pico-pi-base
- Do I attempt to do something with the Pico version of my EuroRack 6HP MCU Experimenter Module? Sounds initially easy but I suspect forcing a MiniDexed into this module eventually will hit other at the moment unforeseen issues.
- Or do I just go for it and put together a special picoDexed EuroRack module itself.
I might have one more go with the Stacky-Pi. I haven’t quite given up. I’ll have to do some research – maybe sprinkling a few capacitors around the board or some updated GND connections might help. Answers on a postcard (or in the comments) if you have any ideas.
I’ll get a Waveshare RP2040 PiZero on order, as I’ve had quite a bit of success with their own “Zero” miniature boards so far, and now I’d like it know if it would work 🙂
To be continued…
Kevin
#define #midi #minidexed #picodexed #raspberryPiPico #StackyPi
-
picoDexed + StackyPi + MiniDexed EuroRack
Now that I have a picoDexed with a display an encoder it is very tempting to create a version of my MiniDexed EuroRack PCB for it.
But as a short diversion, there is another possibility – can I use a RP2040 that is already in a Pi Zero form factor with my existing MiniDexed EuroRack PCB Design?
Spoilers: The answer, it turns out, is no. Something is not quite letting this work for me – it’s close, but I’m just not there yet. Here is another attempt where it works: picoDexed + MiniDexed EuroRack.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Pi Zero RP2040s
I’m aware of a couple of products that were available to put a RP2040 into a Raspberry Pi Zero form factor:
- Red Robots Pico to Zero adaptor.
- Stacky-Pi by SB Components.
- Waveshare RP2040 PiZero.
- Pico to Pi HAT.
- Update: I’ve just found the following open source design: https://github.com/bablokb/pcb-pico-pi-base – details of how I’ve used this can be found here: picoDexed + MiniDexed EuroRack
The first two were available on Tindie and other places, and as far as I can see, both appear to use the same mapping of RP2040 GPIO to RPi 40-pin header. The Red Robot board doesn’t seem to be available anymore, and whilst there are a few Stacky-Pis on Tindie, in most places it seems to be discontinued.
I don’t know anything about the Waveshare or Pico to Pi, but might grab myself one of each.
I’ll give the open source design a try (and possibly save me designing my own…).
As can be seen above, the Red Robots board is designed to take an actual Pico, whereas the Stacky-Pi is its own board with an on-board RP2040.
Mapping over to MiniDexed/RPi Zero
The following table lists the RPi GPIO connections I used in my MiniDexed board and how they map onto the RP2040 using the above boards.
RP2040UseRPiRpiUseRP20403V35VGP20LCD SDAGP2 SDA5VGP21LCD SCLGP3 SCLGNDGP4GP14 TXDGP0GNDGP15 RXDMIDI INGP1GP17GP18I2S BCLKGP28GP27GNDGP22GP233V3GP24GP3RE BGP10 MOSIGNDGP4RE AGP9 MISOGP25GP2RE SWGP11 SCLKGP8GNDGP7ID_SDID_SCGP10SW BACKGP5GNDGP11SW HOMEGP6GP12GP12GP13GNDGP13I2S LCLKGP19GP16GP26GP20GNDGP21I2S DATAGP15The two key problem areas will be the I2S interface and encoder, which both require consecutive GPIO pins for the PIO code to do its magic.
The encoder should be fine – pins RE A and RE B map onto the Pico’s GP3 and 4.
The I2S interface is going to be tricky, as with a BCLK on GP28, it will be expecting LCLK on GP29 rather than the GP13 it is currently routed to on the board. Quite apart from the fact that GP29 isn’t even broken out on a Pico.
The obvious thing to explore is if the BCLK connection can be routed through to GP13 on the RPi header, or GP12 for the RP2040. That would be handy if so.
Connecting into GP13 should be possible as this pin is currently unconnected on the MiniDexed PCB. It will involve cutting a track however for GP18. The existing track and its new destination is highlighted below in blue.
Changing I2C Bus and UARTs
There is one other complication however. The picoDexed configuration has the ssd1306 connected to GP2 and GP3 which are multiplexed onto the I2C bus 1.
The adaptor configuration maps SDA/SCL onto GP20/21 which are multiplexed onto I2C bus 0. I updated the code to support changing I2C bus in addition to changing IO pins. Arguably, I should probably have supported this in the first place anyway…
A similar issue exists for the UART, but unfortunately that isn’t quite so easy to change.
I can take a similar approach to the above for the Serial MIDI link – allowing it to use either UART0 or UART1.
But that has to be matched with a change in the debug serial port too. But unfortunately, as far as I can see, that has to be configured in the master CMakeLists.txt file (as I talked about in Part 3).
New picoDexed GPIO Configuration
Given the above, the following new GPIO pins should be defined in config.h:
#define PWM_PIN 10
#define I2S_DATA_PIN 15
#define I2S_BCLK_PIN 12
#define I2S_LRCLK_PIN 13 // Implied by BCLK=12
#define MIDI_UART 0
#define MIDI_TX_PIN 0 // Not used
#define MIDI_RX_PIN 1
#define DEBUG_UART_TX_PIN 8
#define DEBUG_UART_RX_PIN 9
#define DISPLAY_I2C_BUS 0
#define DISPLAY_I2C_SDA 20
#define DISPLAY_I2C_SCL 21
#define DISPLAY_I2C_ADDR 0x3C
#define DISPLAY_W 128
#define DISPLAY_H 32
#define ENCODER_A_PIN 3
#define ENCODER_B_PIN 4 // Not used
#define ENCODER_SW_PIN 2 // Not usedIn addition to this, to keep using the debug output requires the following lines adding to ‘target_compile_definitions’ in CMakeLists.txt.
PICO_DEFAULT_UART=1
PICO_DEFAULT_UART_TX_PIN=8
PICO_DEFAULT_UART_RX_PIN=9Bringing it all together…
I decided to hack on my (already pretty hacked) prototype MiniDexed EuroRack board and cut and patch the trace to the DAC as described above.
The complication being the GPIO header pin I need to get to is under the OLED display, but I could just about do it – see below.
It doesn’t work. Unfortunately.
First of, I have to say, I’ve not found the Stacky-Pi particularly reliable. It took me ages to get it to successfully boot up into accepting a uf2 file, and once installed, I was struggling to get it to reliably boot and run.
Weirdly it seems to work best when I have a finger on the flash chip which seems to imply some board layout/grounding/stability issues to me…
From what I can see, the display, MIDI, serial debug and encoder are working fine though once it does get up and running.
But I just can’t get any reliable sound out of the thing at all. I managed sound once, but that was it. It is all quiet unreliable for me – far too unreliable to be useful.
Shame, as it actually looks really cool!
Closing Thoughts
It has been a frustrating afternoon. I’m having to leave this one here for now as there are just too many unknowns at the moment to really get to the bottom of what is going on.
I thought the Stacky-Pi would be a quick and easy fix, but haven’t ever used them before, and the fact that they are discontinued and there is very little information that I can find online about them makes me think perhaps they aren’t worth persevering with.
So I have a number of options now:
- Try a Waveshare RP2040 PiZero. As there are a lot more peripherals, I’m not sure how much what I’m doing will translate across, to be honest, it cost wise, it’s essentially the same as a Zero itself, which I know “just works”.
- Do I design my own Pico to RPI GPIO converter board to let me use that with my existing MiniDexed EuroRack design? Tempting and probably not that hard.
- Update: I’ve since found (and ordered) https://github.com/bablokb/pcb-pico-pi-base
- Update 2: And it works! picoDexed + MiniDexed EuroRack
- Update: I’ve since found (and ordered) https://github.com/bablokb/pcb-pico-pi-base
- Do I attempt to do something with the Pico version of my EuroRack 6HP MCU Experimenter Module? Sounds initially easy but I suspect forcing a MiniDexed into this module eventually will hit other at the moment unforeseen issues.
- Or do I just go for it and put together a special picoDexed EuroRack module itself.
I might have one more go with the Stacky-Pi. I haven’t quite given up. I’ll have to do some research – maybe sprinkling a few capacitors around the board or some updated GND connections might help. Answers on a postcard (or in the comments) if you have any ideas.
I’ll get a Waveshare RP2040 PiZero on order, as I’ve had quite a bit of success with their own “Zero” miniature boards so far, and now I’d like it know if it would work 🙂
To be continued…
Kevin
#define #midi #minidexed #picodexed #raspberryPiPico #StackyPi
-
MT32-Pi on my EuroRack MiniDexed PCB
This is great. I was asked by Michel (mragutlich) if I knew how to build MT32-Pi to configure it for my MiniDexed EuroRack PCB but I don’t and there isn’t a lot of information apparently on how to build it from source.
So I offered my Rebuilding my Ability to Build MiniDexed post which talks about getting to the point of being able to build MiniDexed and as both synths run on circle, figured that would be a pretty good starting point.
And then Michel came back to me with a complete set of instructions for Ubuntu and I’ve just run through them – and they work great.
So massive thanks to Michel, this is how you could get MT32-Pi running on my MiniDexed EuroRack PCB.
https://makertube.net/w/2xzd8b4RPDPX1YJL3CpA57
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
Previous posts on MT32-Pi:
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Parts list
- Raspberry Pi Zero 2.
- Micro SD card.
- MiniDexed EuroRack PCB and panel.
- Power, leads, additional connectors and so on.
Building MT32-Pi on Ubuntu
Here are Michel’s instructions that worked for me.
Setup a Ubuntu 20.4 LTS system.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install dialog
sudo apt-get install cmake
sudo apt-get install pkg-config
sudo apt-get install glib-2.0 Now clone the mt32-pi github repo
git clone –recursive https://github.com/dwhinham/mt32-pi.git
cd mt32-pi
nano src/control/simpleencoder.cpp In nano change the following lines
constexpr u8 GPIOPinButton1 = 5;
constexpr u8 GPIOPinButton2 = 6;
constexpr u8 GPIOPinEncoderButton = 11;
constexpr u8 GPIOPinEncoderCLK = 10;
constexpr u8 GPIOPinEncoderDAT = 9;
ctrl-X and say ‘Y’
make all
If everything goes well you will have a kernel8.img file in your directory.
Now hook up a microSD cardreader to your Linux environment and insert a blank microSD card
Goto the ~/scripts dir and start mt32pi_installer.sh , this will install all the needed bare metal files
sudo ./mt32pi_installer.sh
When ready copy the kernel8.img file to the SD card
Change in the mt32-pi.cfg file the line ‘encoder_reversed = off’ to 'on', now the volume knob will increase when turned clockwise
Copy the MT32 roms to to the rom dir
Copy some Sf2 soundfont files tot the soundfont dir
Thats it…unmount the sd card , put it in your Zero 2 W…and boot it.. the MT32pi logo should appear on the oled screen and the buttons and rotary encoder should work properly
The first button switches between m32 and soundfont mode.
The second button will switch to the next rom or soundfont file
The rotary encoder will change the master volume.
The encoder switch only displays a message that the button is pressedThere were a couple of tweaks I needed. First of, the mt32_inistaller.sh script has to be run as root. This will go through and ask you to choose the SD card to format and install and so on.
At some point you will need some MT32 ROMs. There are details of how to do that on the original MT32-Pi project here: https://github.com/dwhinham/mt32-pi?tab=readme-ov-file#-quick-start-guide
In addition to the aforementioned “encoder_reversed” setting in the mt32-pi.cfg file there are a couple of other options I find used (many of these were already set up by the installer):
[system]
default_synth = mt32 or soundfount
output_device = i2s
[control]
scheme = simple_encoder
encoder_reversed = on
mister = off
[mt32emu]
midi_channels = alternate
[lcd]
type = ssd1306_i2c
width = 128
height = 32
i2c_lcd_address = 3cI think those were the major changes.
I installed a single “new” ROM and a PCM ROM. The default soundfont is already installed. And that was essentially that.
The first time I tried it, I’d forgotten to copy over the kernel8.img file, so that took a moment to figure out! But apart from that it was all pretty straight forward for me. Many of the packages to install at the start were already there and up to date, so that didn’t take too long and the build itself was again fairly straight forward.
Closing Thoughts
A big thanks to Michel for asking the question, then figuring out the answer, and most importantly sending me the instructions and permission to post them here.
This is a great additional option for my PCB 🙂
The video shows the MT32-Pi in Soundfont mode playing a MIDI file of Khachaturian’s Masquerade Waltz.
It is great to have a full General MIDI Soundfont device in EuroRack format.
Kevin
-
MT32-Pi on my EuroRack MiniDexed PCB
This is great. I was asked by Michel (mragutlich) if I knew how to build MT32-Pi to configure it for my MiniDexed EuroRack PCB but I don’t and there isn’t a lot of information apparently on how to build it from source.
So I offered my Rebuilding my Ability to Build MiniDexed post which talks about getting to the point of being able to build MiniDexed and as both synths run on circle, figured that would be a pretty good starting point.
And then Michel came back to me with a complete set of instructions for Ubuntu and I’ve just run through them – and they work great.
So massive thanks to Michel, this is how you could get MT32-Pi running on my MiniDexed EuroRack PCB.
https://makertube.net/w/2xzd8b4RPDPX1YJL3CpA57
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
Previous posts on MT32-Pi:
If you are new to microcontrollers and single board computers, see the Getting Started pages.
Parts list
- Raspberry Pi Zero 2.
- Micro SD card.
- MiniDexed EuroRack PCB and panel.
- Power, leads, additional connectors and so on.
Building MT32-Pi on Ubuntu
Here are Michel’s instructions that worked for me.
Setup a Ubuntu 20.4 LTS system.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install dialog
sudo apt-get install cmake
sudo apt-get install pkg-config
sudo apt-get install glib-2.0 Now clone the mt32-pi github repo
git clone –recursive https://github.com/dwhinham/mt32-pi.git
cd mt32-pi
nano src/control/simpleencoder.cpp In nano change the following lines
constexpr u8 GPIOPinButton1 = 5;
constexpr u8 GPIOPinButton2 = 6;
constexpr u8 GPIOPinEncoderButton = 11;
constexpr u8 GPIOPinEncoderCLK = 10;
constexpr u8 GPIOPinEncoderDAT = 9;
ctrl-X and say ‘Y’
make all
If everything goes well you will have a kernel8.img file in your directory.
Now hook up a microSD cardreader to your Linux environment and insert a blank microSD card
Goto the ~/scripts dir and start mt32pi_installer.sh , this will install all the needed bare metal files
sudo ./mt32pi_installer.sh
When ready copy the kernel8.img file to the SD card
Change in the mt32-pi.cfg file the line ‘encoder_reversed = off’ to 'on', now the volume knob will increase when turned clockwise
Copy the MT32 roms to to the rom dir
Copy some Sf2 soundfont files tot the soundfont dir
Thats it…unmount the sd card , put it in your Zero 2 W…and boot it.. the MT32pi logo should appear on the oled screen and the buttons and rotary encoder should work properly
The first button switches between m32 and soundfont mode.
The second button will switch to the next rom or soundfont file
The rotary encoder will change the master volume.
The encoder switch only displays a message that the button is pressedThere were a couple of tweaks I needed. First of, the mt32_inistaller.sh script has to be run as root. This will go through and ask you to choose the SD card to format and install and so on.
At some point you will need some MT32 ROMs. There are details of how to do that on the original MT32-Pi project here: https://github.com/dwhinham/mt32-pi?tab=readme-ov-file#-quick-start-guide
In addition to the aforementioned “encoder_reversed” setting in the mt32-pi.cfg file there are a couple of other options I find used (many of these were already set up by the installer):
[system]
default_synth = mt32 or soundfount
output_device = i2s
[control]
scheme = simple_encoder
encoder_reversed = on
mister = off
[mt32emu]
midi_channels = alternate
[lcd]
type = ssd1306_i2c
width = 128
height = 32
i2c_lcd_address = 3cI think those were the major changes.
I installed a single “new” ROM and a PCM ROM. The default soundfont is already installed. And that was essentially that.
The first time I tried it, I’d forgotten to copy over the kernel8.img file, so that took a moment to figure out! But apart from that it was all pretty straight forward for me. Many of the packages to install at the start were already there and up to date, so that didn’t take too long and the build itself was again fairly straight forward.
Closing Thoughts
A big thanks to Michel for asking the question, then figuring out the answer, and most importantly sending me the instructions and permission to post them here.
This is a great additional option for my PCB 🙂
The video shows the MT32-Pi in Soundfont mode playing a MIDI file of Khachaturian’s Masquerade Waltz.
It is great to have a full General MIDI Soundfont device in EuroRack format.
Kevin
-
Finally finished the build guide and design for my MiniDexed EuroRack module.
Definitely still a prototype and definitely still not for use in anything but a sacrificial system.
Plenty I could be doing to make it better, but it is probably at the "good enough to lose interest" stage for me now :)
https://diyelectromusic.com/2025/02/22/minidexed-eurorack-pcb-design/
-
Finally finished the build guide and design for my MiniDexed EuroRack module.
Definitely still a prototype and definitely still not for use in anything but a sacrificial system.
Plenty I could be doing to make it better, but it is probably at the "good enough to lose interest" stage for me now :)
https://diyelectromusic.com/2025/02/22/minidexed-eurorack-pcb-design/
-
Finally finished the build guide and design for my MiniDexed EuroRack module.
Definitely still a prototype and definitely still not for use in anything but a sacrificial system.
Plenty I could be doing to make it better, but it is probably at the "good enough to lose interest" stage for me now :)
https://diyelectromusic.com/2025/02/22/minidexed-eurorack-pcb-design/
-
Finally finished the build guide and design for my MiniDexed EuroRack module.
Definitely still a prototype and definitely still not for use in anything but a sacrificial system.
Plenty I could be doing to make it better, but it is probably at the "good enough to lose interest" stage for me now :)
https://diyelectromusic.com/2025/02/22/minidexed-eurorack-pcb-design/
-
Finally finished the build guide and design for my MiniDexed EuroRack module.
Definitely still a prototype and definitely still not for use in anything but a sacrificial system.
Plenty I could be doing to make it better, but it is probably at the "good enough to lose interest" stage for me now :)
https://diyelectromusic.com/2025/02/22/minidexed-eurorack-pcb-design/
-
MiniDexed EuroRack PCB Build Guide
Here are the build notes for my MiniDexed EuroRack PCB Design.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to single board computers, see the Getting Started pages.
Bill of Materials
- MiniDexed EuroRack PCB (GitHub link below)
- Front panel
- Raspberry Pi Zero (1 or 2)
- GY-PCM5102 module
- 128×32 SSD1306 OLED display module (pins order: GND-VCC-SCL-SDA)
- 1x L7805 regulator
- 1x H11L1 optoisolator
- 1x 1N5817 Schottky diode
- 1x 1N4148 or 1N914 signal diode
- 1×220Ω, 1×470Ω resistors
- 5x 10nF ceramic capactiors
- 3x 100nF ceramic capacitors
- 2x 47uF electrolytic capacitors (low profile if possible – see text)
- 1x switched rotary encoder with a threaded shroud and nut
- 2x tall tactile buttons – 6x6mm base, at least 12mm height (it needs to poke through the panel!)
- 16-way shrouded EuroRack style power header.
- 40-way GPIO header (optional: extended – see discussion).
- Pin-headers and connecting wires.
Also required: 3.5mm panel mount sockets for audio and MIDI – I use different types, but it will depend on the panel used (see panel discussion).
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Resistors and diode on the top.
- H11L1 (assuming soldered directly to the PCB).
- Disc capacitors on the top.
- Diode and disc capacitor on the bottom.
- Electrolytic capacitors on the bottom.
- GPIO and 16-way power socket on the bottom.
- Buttons and encoder on the top.
- GY-PCM5102 module (see photos for steps required prior to fixing).
- SSD1306 (see photos for steps required prior to fixing).
Here are some build photos and more details of the steps involved.
Note: Most of these photos show the build for V0.1 of the PCB. There are some minor updates in V0.2 which will be noted where relevant.
The power circuit on the underside of the board has two options for mounting the regulator. It can go either vertically or horizontally, but with the tab up. Both methods use the same solder holes. Which is chosen will largely depend on what heatsink options there are.
Note: the first version of the board only had a single option, with the tab down, making contact with the PCB. This didn’t really work from a cooling perspective, hence the change.
The following “in progress” photos still show the first version of the board with the regulator the other way around, an additional resistor, omitted from V2, and the diode in a different place.
Note that low-profile capacitors may be required as they will sit underneath the Raspberry Pi Zero. If the regulator is “standing up” then it should be possible to bend the capacitors over into the space reserved for the regulator.
The GPIO headers have to allow enough space for the Zero to be mounted and not interfere with the PCM5102. See discussion below.
The EuroRack headers need to be correctly oriented and shrouded headers are strongly recommended.
The SSD1306 requires additional spacers on the pins to raise it above the PCB for presentation closer to the front panel.
The PCM5102 must have its solder jumpers configured, if not set already, and requires both sets of pin headers adding.
In the photo below, the PCM5102 has zero-ohm, surface mount resistors as jumpers – but it is really hard to see! On first glance, it looks like there is no link configured at all, but they are connected as: 1L, 2L, 3H, 4L.
These modules have to be added after the other components, as they prevent access to the solder pads during assembly.
GPIO Header Options
One option is to use extended headers, which ought to allow room for the Zero and a heatsink (if required) on the main BCM chip. Note: A V2 Pi Zero could probably benefit from a heatsink I’d imagine if running fully processing all 8 tone generators.
Another option is to remove the on-board 3.5mm, SMT, audio jack on the PCM5102 as shown below, and use “normal” sized GPIO headers.
If non-extended GPIO header is used then, as already mentioned, low-profile electrolytic capacitors may be required as they are positioned underneath the Pi Zero too.
Power Options
As previously mentioned, there wasn’t really much choice when it came to mounting the power regulator for V1 of the board, but in V2 I’ve positioned it differently to allow it to be “tab up” or upright.
The upright positioning was hopefully placed so that a long, thin heatsink could be mounted alongside the Pi. This shows one of those heatsinks you can get for M2 SSD cards. I figure that drilling a hole in it would do the trick, but I’ve not actually done this myself (see below).
The solution I went with in the end was to actually replace the 7805 with a 7805-compatible DC-DC buck converter. These are available fairly cheaply online.
These work a lot more efficiently than a 7805, so especially when drawing 300mA or so from a Pi Zero 2 whilst dropping from 12V down to 5V, they still have no need of a heatsink.
The downside of using these (apparently) is that as a switching power unit, they can be pretty electrically noisy. But as I’m powering a microcontroller rather than a pure analog circuit in the first place, I decided it probably wasn’t going to be making things much worse. This is hardly a high quality, electrically clean build anyway!
Final Assembly
Required Components to use my panel:
- MiniDexed EuroRack Panel (see Github link below).
- Raspberry Pi Zero (1 or 2) with GPIO header pins.
- MiniDexed EuroRack PCB as described above.
- Panel mount 3.5mm TRS socket for MIDI. 6mm diameter hole assumed.
- Panel mount 3.5mm TRS socket for audio. 8mm diameter hole assumed.
- 2.5mm mounting posts, screws and nuts.
I’m using the same designs of TRS sockets for MIDI and audio that I use in all my modules. These need mounting on the panel. Soldering will come in a moment.
I found that with the GPIO header height I was using, alongside the final height of the SSD1306, height of the buttons, and the encoder’s shroud, that the following mountings were required:
- 2x black nylon 2.5mm 6mm screws
- 2x black 10mm 2.5mm spacers
- 2x white 8mm 2.5mm spacers with screws
- 2x white nylon 2.5mm 6mm screws
An alternative build had a slightly larger gap (due to using 12mm buttons) so required four sets of 10×2.5mm spacers.
Another quirk of my first build was that I only had 9mm high buttons which wasn’t quite enough to reach through the panel. Ideally a 11mm or larger button would be required.
But this allowed me to 3D print a white 2.8mm diameter, 3.0mm high, extension that I could glue on the top, meaning that the exposed part of the button was white, matching the panel.
My second build used a black panel and 12mm buttons, but as already mentioned this meant the panel had to use 10mm spacers instead of 8mm spacers. One issue with that is that there isn’t much of the encoder shaft exposed. I found some knobs that worked ok, but my preferred (cheap) knobs could not be fitted and still allow the encoder switch to function.
In summary, there is still a fair bit of trial and error with each build depending on the exact combinations of screen height, encoder shaft length, button length and so on.
Once the PCB and panel is fixed together then the two 3.5mm sockets can be soldered to the PCB (or connected using headers if that was the preferred option).
Recall that MIDI IN does not required a GND connection. Also double check which solder tabs correspond to the TIP and which to the RING, which should match the “T” and “R” labels on the PCB (“S” is for shield, i.e. GND).
Testing
I recommend performing the general tests described here: PCBs.
Then, prior to plugging in the RPi Zero, do the following:
- Verify that the 12V and GND connections of the EuroRack connector have no shorts.
- Power up the board (no Pi) and verify that there is a 5V signal present and going to the PCM5102 and SSD1306. The PCM5102 should have its red power LED on.
Only then power off, plug in the RPi Zero with an SD card containing MiniDexed (configuration below) and verify that the display, encoder, buttons, MIDI IN, and audio out are all working.
MiniDexed Configuration
The following are the key MiniDexed.ini configuration options required:
SoundDevice=i2s
SSD1306LCDI2CAddress=0x3C
SSD1306LCDWidth=128
SSD1306LCDHeight=32
LCDColumns=20
LCDRows=2
ButtonPinBack=5
ButtonActionBack=click
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=6
ButtonActionHome=click
ButtonPinShortcut=11
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9PCB Errata
As already noted, there were a number of issues with the first version of the PCB, but these should have been addressed in the published version.
As the time of writing, there are no further known issues with V0.2 of the PCB.
Enhancements:
- I feel like the power situation ought to be better. One option could be to break out a USB connection to the Zero directly allowing the use of a standard “wall wart” type supply.
- Another option might be to make use of the solder pads on the rear of a Zero (like the Zero STEM does).
- It might also be useful to provide a configurable (e.g. solder bridge) link to enable the EuroRack +5V supply as an option.
- There are already options to use internal (within a rack) links for MIDI and audio if required using the pin headers on the PCB, but it might be nice to allow a choice between panel or rear connectors.
Closing Thoughts
I’m still not fully happy with the longer-term implications of how I’m powering these boards, but I’ll see how things go. Those DC-DC converters seem like a feasible option so I’ll see how they perform.
The panel height issue could be better too – it would be nice to have a recommended set of components and a known useful size of spacers, but there is still a fair bit of trial an error at the moment with each build.
Also, sometimes the display height isn’t perfect, as shown below. I might 3D print a display bezel or surround to help.
The end results looks pretty good though, so for this stage in my thinking about these, I’m pretty pleased with how this has ended up.
But one last time, just to make my position totally clear: this is a DIY system and should only be used with other DIY modules you wouldn’t mind too much losing.
It is NOT for use alongside other commercial (expensive) or treasured modules. There are commercial versions of MiniDexed apparently for that, that I have no experience of.
Kevin
-
MiniDexed EuroRack PCB Build Guide
Here are the build notes for my MiniDexed EuroRack PCB Design.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to single board computers, see the Getting Started pages.
Bill of Materials
- MiniDexed EuroRack PCB (GitHub link below)
- Front panel
- Raspberry Pi Zero (1 or 2)
- GY-PCM5102 module
- 128×32 SSD1306 OLED display module (pins order: GND-VCC-SCL-SDA)
- 1x L7805 regulator
- 1x H11L1 optoisolator
- 1x 1N5817 Schottky diode
- 1x 1N4148 or 1N914 signal diode
- 1×220Ω, 1×470Ω resistors
- 5x 10nF ceramic capactiors
- 3x 100nF ceramic capacitors
- 2x 47uF electrolytic capacitors (low profile if possible – see text)
- 1x switched rotary encoder with a threaded shroud and nut
- 2x tall tactile buttons – 6x6mm base, at least 12mm height (it needs to poke through the panel!)
- 16-way shrouded EuroRack style power header.
- 40-way GPIO header (optional: extended – see discussion).
- Pin-headers and connecting wires.
Also required: 3.5mm panel mount sockets for audio and MIDI – I use different types, but it will depend on the panel used (see panel discussion).
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Resistors and diode on the top.
- H11L1 (assuming soldered directly to the PCB).
- Disc capacitors on the top.
- Diode and disc capacitor on the bottom.
- Electrolytic capacitors on the bottom.
- GPIO and 16-way power socket on the bottom.
- Buttons and encoder on the top.
- GY-PCM5102 module (see photos for steps required prior to fixing).
- SSD1306 (see photos for steps required prior to fixing).
Here are some build photos and more details of the steps involved.
Note: Most of these photos show the build for V0.1 of the PCB. There are some minor updates in V0.2 which will be noted where relevant.
The power circuit on the underside of the board has two options for mounting the regulator. It can go either vertically or horizontally, but with the tab up. Both methods use the same solder holes. Which is chosen will largely depend on what heatsink options there are.
Note: the first version of the board only had a single option, with the tab down, making contact with the PCB. This didn’t really work from a cooling perspective, hence the change.
The following “in progress” photos still show the first version of the board with the regulator the other way around, an additional resistor, omitted from V2, and the diode in a different place.
Note that low-profile capacitors may be required as they will sit underneath the Raspberry Pi Zero. If the regulator is “standing up” then it should be possible to bend the capacitors over into the space reserved for the regulator.
The GPIO headers have to allow enough space for the Zero to be mounted and not interfere with the PCM5102. See discussion below.
The EuroRack headers need to be correctly oriented and shrouded headers are strongly recommended.
The SSD1306 requires additional spacers on the pins to raise it above the PCB for presentation closer to the front panel.
The PCM5102 must have its solder jumpers configured, if not set already, and requires both sets of pin headers adding.
In the photo below, the PCM5102 has zero-ohm, surface mount resistors as jumpers – but it is really hard to see! On first glance, it looks like there is no link configured at all, but they are connected as: 1L, 2L, 3H, 4L.
These modules have to be added after the other components, as they prevent access to the solder pads during assembly.
GPIO Header Options
One option is to use extended headers, which ought to allow room for the Zero and a heatsink (if required) on the main BCM chip. Note: A V2 Pi Zero could probably benefit from a heatsink I’d imagine if running fully processing all 8 tone generators.
Another option is to remove the on-board 3.5mm, SMT, audio jack on the PCM5102 as shown below, and use “normal” sized GPIO headers.
If non-extended GPIO header is used then, as already mentioned, low-profile electrolytic capacitors may be required as they are positioned underneath the Pi Zero too.
Power Options
As previously mentioned, there wasn’t really much choice when it came to mounting the power regulator for V1 of the board, but in V2 I’ve positioned it differently to allow it to be “tab up” or upright.
The upright positioning was hopefully placed so that a long, thin heatsink could be mounted alongside the Pi. This shows one of those heatsinks you can get for M2 SSD cards. I figure that drilling a hole in it would do the trick, but I’ve not actually done this myself (see below).
The solution I went with in the end was to actually replace the 7805 with a 7805-compatible DC-DC buck converter. These are available fairly cheaply online.
These work a lot more efficiently than a 7805, so especially when drawing 300mA or so from a Pi Zero 2 whilst dropping from 12V down to 5V, they still have no need of a heatsink.
The downside of using these (apparently) is that as a switching power unit, they can be pretty electrically noisy. But as I’m powering a microcontroller rather than a pure analog circuit in the first place, I decided it probably wasn’t going to be making things much worse. This is hardly a high quality, electrically clean build anyway!
Final Assembly
Required Components to use my panel:
- MiniDexed EuroRack Panel (see Github link below).
- Raspberry Pi Zero (1 or 2) with GPIO header pins.
- MiniDexed EuroRack PCB as described above.
- Panel mount 3.5mm TRS socket for MIDI. 6mm diameter hole assumed.
- Panel mount 3.5mm TRS socket for audio. 8mm diameter hole assumed.
- 2.5mm mounting posts, screws and nuts.
I’m using the same designs of TRS sockets for MIDI and audio that I use in all my modules. These need mounting on the panel. Soldering will come in a moment.
I found that with the GPIO header height I was using, alongside the final height of the SSD1306, height of the buttons, and the encoder’s shroud, that the following mountings were required:
- 2x black nylon 2.5mm 6mm screws
- 2x black 10mm 2.5mm spacers
- 2x white 8mm 2.5mm spacers with screws
- 2x white nylon 2.5mm 6mm screws
An alternative build had a slightly larger gap (due to using 12mm buttons) so required four sets of 10×2.5mm spacers.
Another quirk of my first build was that I only had 9mm high buttons which wasn’t quite enough to reach through the panel. Ideally a 11mm or larger button would be required.
But this allowed me to 3D print a white 2.8mm diameter, 3.0mm high, extension that I could glue on the top, meaning that the exposed part of the button was white, matching the panel.
My second build used a black panel and 12mm buttons, but as already mentioned this meant the panel had to use 10mm spacers instead of 8mm spacers. One issue with that is that there isn’t much of the encoder shaft exposed. I found some knobs that worked ok, but my preferred (cheap) knobs could not be fitted and still allow the encoder switch to function.
In summary, there is still a fair bit of trial and error with each build depending on the exact combinations of screen height, encoder shaft length, button length and so on.
Once the PCB and panel is fixed together then the two 3.5mm sockets can be soldered to the PCB (or connected using headers if that was the preferred option).
Recall that MIDI IN does not required a GND connection. Also double check which solder tabs correspond to the TIP and which to the RING, which should match the “T” and “R” labels on the PCB (“S” is for shield, i.e. GND).
Testing
I recommend performing the general tests described here: PCBs.
Then, prior to plugging in the RPi Zero, do the following:
- Verify that the 12V and GND connections of the EuroRack connector have no shorts.
- Power up the board (no Pi) and verify that there is a 5V signal present and going to the PCM5102 and SSD1306. The PCM5102 should have its red power LED on.
Only then power off, plug in the RPi Zero with an SD card containing MiniDexed (configuration below) and verify that the display, encoder, buttons, MIDI IN, and audio out are all working.
MiniDexed Configuration
The following are the key MiniDexed.ini configuration options required:
SoundDevice=i2s
SSD1306LCDI2CAddress=0x3C
SSD1306LCDWidth=128
SSD1306LCDHeight=32
LCDColumns=20
LCDRows=2
ButtonPinBack=5
ButtonActionBack=click
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=6
ButtonActionHome=click
ButtonPinShortcut=11
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9PCB Errata
As already noted, there were a number of issues with the first version of the PCB, but these should have been addressed in the published version.
As the time of writing, there are no further known issues with V0.2 of the PCB.
Enhancements:
- I feel like the power situation ought to be better. One option could be to break out a USB connection to the Zero directly allowing the use of a standard “wall wart” type supply.
- Another option might be to make use of the solder pads on the rear of a Zero (like the Zero STEM does).
- It might also be useful to provide a configurable (e.g. solder bridge) link to enable the EuroRack +5V supply as an option.
- There are already options to use internal (within a rack) links for MIDI and audio if required using the pin headers on the PCB, but it might be nice to allow a choice between panel or rear connectors.
Closing Thoughts
I’m still not fully happy with the longer-term implications of how I’m powering these boards, but I’ll see how things go. Those DC-DC converters seem like a feasible option so I’ll see how they perform.
The panel height issue could be better too – it would be nice to have a recommended set of components and a known useful size of spacers, but there is still a fair bit of trial an error at the moment with each build.
Also, sometimes the display height isn’t perfect, as shown below. I might 3D print a display bezel or surround to help.
The end results looks pretty good though, so for this stage in my thinking about these, I’m pretty pleased with how this has ended up.
But one last time, just to make my position totally clear: this is a DIY system and should only be used with other DIY modules you wouldn’t mind too much losing.
It is NOT for use alongside other commercial (expensive) or treasured modules. There are commercial versions of MiniDexed apparently for that, that I have no experience of.
Kevin
-
MiniDexed EuroRack PCB Build Guide
Here are the build notes for my MiniDexed EuroRack PCB Design.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to single board computers, see the Getting Started pages.
Bill of Materials
- MiniDexed EuroRack PCB (GitHub link below)
- Front panel
- Raspberry Pi Zero (1 or 2)
- GY-PCM5102 module
- 128×32 SSD1306 OLED display module (pins order: GND-VCC-SCL-SDA)
- 1x L7805 regulator
- 1x H11L1 optoisolator
- 1x 1N5817 Schottky diode
- 1x 1N4148 or 1N914 signal diode
- 1×220Ω, 1×470Ω resistors
- 5x 10nF ceramic capactiors
- 3x 100nF ceramic capacitors
- 2x 47uF electrolytic capacitors (low profile if possible – see text)
- 1x switched rotary encoder with a threaded shroud and nut
- 2x tall tactile buttons – 6x6mm base, at least 12mm height (it needs to poke through the panel!)
- 16-way shrouded EuroRack style power header.
- 40-way GPIO header (optional: extended – see discussion).
- Pin-headers and connecting wires.
Also required: 3.5mm panel mount sockets for audio and MIDI – I use different types, but it will depend on the panel used (see panel discussion).
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Resistors and diode on the top.
- H11L1 (assuming soldered directly to the PCB).
- Disc capacitors on the top.
- Diode and disc capacitor on the bottom.
- Electrolytic capacitors on the bottom.
- GPIO and 16-way power socket on the bottom.
- Buttons and encoder on the top.
- GY-PCM5102 module (see photos for steps required prior to fixing).
- SSD1306 (see photos for steps required prior to fixing).
Here are some build photos and more details of the steps involved.
Note: Most of these photos show the build for V0.1 of the PCB. There are some minor updates in V0.2 which will be noted where relevant.
The power circuit on the underside of the board has two options for mounting the regulator. It can go either vertically or horizontally, but with the tab up. Both methods use the same solder holes. Which is chosen will largely depend on what heatsink options there are.
Note: the first version of the board only had a single option, with the tab down, making contact with the PCB. This didn’t really work from a cooling perspective, hence the change.
The following “in progress” photos still show the first version of the board with the regulator the other way around, an additional resistor, omitted from V2, and the diode in a different place.
Note that low-profile capacitors may be required as they will sit underneath the Raspberry Pi Zero. If the regulator is “standing up” then it should be possible to bend the capacitors over into the space reserved for the regulator.
The GPIO headers have to allow enough space for the Zero to be mounted and not interfere with the PCM5102. See discussion below.
The EuroRack headers need to be correctly oriented and shrouded headers are strongly recommended.
The SSD1306 requires additional spacers on the pins to raise it above the PCB for presentation closer to the front panel.
The PCM5102 must have its solder jumpers configured, if not set already, and requires both sets of pin headers adding.
In the photo below, the PCM5102 has zero-ohm, surface mount resistors as jumpers – but it is really hard to see! On first glance, it looks like there is no link configured at all, but they are connected as: 1L, 2L, 3H, 4L.
These modules have to be added after the other components, as they prevent access to the solder pads during assembly.
GPIO Header Options
One option is to use extended headers, which ought to allow room for the Zero and a heatsink (if required) on the main BCM chip. Note: A V2 Pi Zero could probably benefit from a heatsink I’d imagine if running fully processing all 8 tone generators.
Another option is to remove the on-board 3.5mm, SMT, audio jack on the PCM5102 as shown below, and use “normal” sized GPIO headers.
If non-extended GPIO header is used then, as already mentioned, low-profile electrolytic capacitors may be required as they are positioned underneath the Pi Zero too.
Power Options
As previously mentioned, there wasn’t really much choice when it came to mounting the power regulator for V1 of the board, but in V2 I’ve positioned it differently to allow it to be “tab up” or upright.
The upright positioning was hopefully placed so that a long, thin heatsink could be mounted alongside the Pi. This shows one of those heatsinks you can get for M2 SSD cards. I figure that drilling a hole in it would do the trick, but I’ve not actually done this myself (see below).
The solution I went with in the end was to actually replace the 7805 with a 7805-compatible DC-DC buck converter. These are available fairly cheaply online.
These work a lot more efficiently than a 7805, so especially when drawing 300mA or so from a Pi Zero 2 whilst dropping from 12V down to 5V, they still have no need of a heatsink.
The downside of using these (apparently) is that as a switching power unit, they can be pretty electrically noisy. But as I’m powering a microcontroller rather than a pure analog circuit in the first place, I decided it probably wasn’t going to be making things much worse. This is hardly a high quality, electrically clean build anyway!
Final Assembly
Required Components to use my panel:
- MiniDexed EuroRack Panel (see Github link below).
- Raspberry Pi Zero (1 or 2) with GPIO header pins.
- MiniDexed EuroRack PCB as described above.
- Panel mount 3.5mm TRS socket for MIDI. 6mm diameter hole assumed.
- Panel mount 3.5mm TRS socket for audio. 8mm diameter hole assumed.
- 2.5mm mounting posts, screws and nuts.
I’m using the same designs of TRS sockets for MIDI and audio that I use in all my modules. These need mounting on the panel. Soldering will come in a moment.
I found that with the GPIO header height I was using, alongside the final height of the SSD1306, height of the buttons, and the encoder’s shroud, that the following mountings were required:
- 2x black nylon 2.5mm 6mm screws
- 2x black 10mm 2.5mm spacers
- 2x white 8mm 2.5mm spacers with screws
- 2x white nylon 2.5mm 6mm screws
An alternative build had a slightly larger gap (due to using 12mm buttons) so required four sets of 10×2.5mm spacers.
Another quirk of my first build was that I only had 9mm high buttons which wasn’t quite enough to reach through the panel. Ideally a 11mm or larger button would be required.
But this allowed me to 3D print a white 2.8mm diameter, 3.0mm high, extension that I could glue on the top, meaning that the exposed part of the button was white, matching the panel.
My second build used a black panel and 12mm buttons, but as already mentioned this meant the panel had to use 10mm spacers instead of 8mm spacers. One issue with that is that there isn’t much of the encoder shaft exposed. I found some knobs that worked ok, but my preferred (cheap) knobs could not be fitted and still allow the encoder switch to function.
In summary, there is still a fair bit of trial and error with each build depending on the exact combinations of screen height, encoder shaft length, button length and so on.
Once the PCB and panel is fixed together then the two 3.5mm sockets can be soldered to the PCB (or connected using headers if that was the preferred option).
Recall that MIDI IN does not required a GND connection. Also double check which solder tabs correspond to the TIP and which to the RING, which should match the “T” and “R” labels on the PCB (“S” is for shield, i.e. GND).
Testing
I recommend performing the general tests described here: PCBs.
Then, prior to plugging in the RPi Zero, do the following:
- Verify that the 12V and GND connections of the EuroRack connector have no shorts.
- Power up the board (no Pi) and verify that there is a 5V signal present and going to the PCM5102 and SSD1306. The PCM5102 should have its red power LED on.
Only then power off, plug in the RPi Zero with an SD card containing MiniDexed (configuration below) and verify that the display, encoder, buttons, MIDI IN, and audio out are all working.
MiniDexed Configuration
The following are the key MiniDexed.ini configuration options required:
SoundDevice=i2s
SSD1306LCDI2CAddress=0x3C
SSD1306LCDWidth=128
SSD1306LCDHeight=32
LCDColumns=20
LCDRows=2
ButtonPinBack=5
ButtonActionBack=click
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=6
ButtonActionHome=click
ButtonPinShortcut=11
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9PCB Errata
As already noted, there were a number of issues with the first version of the PCB, but these should have been addressed in the published version.
As the time of writing, there are no further known issues with V0.2 of the PCB.
Enhancements:
- I feel like the power situation ought to be better. One option could be to break out a USB connection to the Zero directly allowing the use of a standard “wall wart” type supply.
- Another option might be to make use of the solder pads on the rear of a Zero (like the Zero STEM does).
- It might also be useful to provide a configurable (e.g. solder bridge) link to enable the EuroRack +5V supply as an option.
- There are already options to use internal (within a rack) links for MIDI and audio if required using the pin headers on the PCB, but it might be nice to allow a choice between panel or rear connectors.
Closing Thoughts
I’m still not fully happy with the longer-term implications of how I’m powering these boards, but I’ll see how things go. Those DC-DC converters seem like a feasible option so I’ll see how they perform.
The panel height issue could be better too – it would be nice to have a recommended set of components and a known useful size of spacers, but there is still a fair bit of trial an error at the moment with each build.
Also, sometimes the display height isn’t perfect, as shown below. I might 3D print a display bezel or surround to help.
The end results looks pretty good though, so for this stage in my thinking about these, I’m pretty pleased with how this has ended up.
But one last time, just to make my position totally clear: this is a DIY system and should only be used with other DIY modules you wouldn’t mind too much losing.
It is NOT for use alongside other commercial (expensive) or treasured modules. There are commercial versions of MiniDexed apparently for that, that I have no experience of.
Kevin
-
MiniDexed EuroRack PCB Build Guide
Here are the build notes for my MiniDexed EuroRack PCB Design.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to single board computers, see the Getting Started pages.
Bill of Materials
- MiniDexed EuroRack PCB (GitHub link below)
- Front panel
- Raspberry Pi Zero (1 or 2)
- GY-PCM5102 module
- 128×32 SSD1306 OLED display module (pins order: GND-VCC-SCL-SDA)
- 1x L7805 regulator
- 1x H11L1 optoisolator
- 1x 1N5817 Schottky diode
- 1x 1N4148 or 1N914 signal diode
- 1×220Ω, 1×470Ω resistors
- 5x 10nF ceramic capactiors
- 3x 100nF ceramic capacitors
- 2x 47uF electrolytic capacitors (low profile if possible – see text)
- 1x switched rotary encoder with a threaded shroud and nut
- 2x tall tactile buttons – 6x6mm base, at least 12mm height (it needs to poke through the panel!)
- 16-way shrouded EuroRack style power header.
- 40-way GPIO header (optional: extended – see discussion).
- Pin-headers and connecting wires.
Also required: 3.5mm panel mount sockets for audio and MIDI – I use different types, but it will depend on the panel used (see panel discussion).
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Resistors and diode on the top.
- H11L1 (assuming soldered directly to the PCB).
- Disc capacitors on the top.
- Diode and disc capacitor on the bottom.
- Electrolytic capacitors on the bottom.
- GPIO and 16-way power socket on the bottom.
- Buttons and encoder on the top.
- GY-PCM5102 module (see photos for steps required prior to fixing).
- SSD1306 (see photos for steps required prior to fixing).
Here are some build photos and more details of the steps involved.
Note: Most of these photos show the build for V0.1 of the PCB. There are some minor updates in V0.2 which will be noted where relevant.
The power circuit on the underside of the board has two options for mounting the regulator. It can go either vertically or horizontally, but with the tab up. Both methods use the same solder holes. Which is chosen will largely depend on what heatsink options there are.
Note: the first version of the board only had a single option, with the tab down, making contact with the PCB. This didn’t really work from a cooling perspective, hence the change.
The following “in progress” photos still show the first version of the board with the regulator the other way around, an additional resistor, omitted from V2, and the diode in a different place.
Note that low-profile capacitors may be required as they will sit underneath the Raspberry Pi Zero. If the regulator is “standing up” then it should be possible to bend the capacitors over into the space reserved for the regulator.
The GPIO headers have to allow enough space for the Zero to be mounted and not interfere with the PCM5102. See discussion below.
The EuroRack headers need to be correctly oriented and shrouded headers are strongly recommended.
The SSD1306 requires additional spacers on the pins to raise it above the PCB for presentation closer to the front panel.
The PCM5102 must have its solder jumpers configured, if not set already, and requires both sets of pin headers adding.
In the photo below, the PCM5102 has zero-ohm, surface mount resistors as jumpers – but it is really hard to see! On first glance, it looks like there is no link configured at all, but they are connected as: 1L, 2L, 3H, 4L.
These modules have to be added after the other components, as they prevent access to the solder pads during assembly.
GPIO Header Options
One option is to use extended headers, which ought to allow room for the Zero and a heatsink (if required) on the main BCM chip. Note: A V2 Pi Zero could probably benefit from a heatsink I’d imagine if running fully processing all 8 tone generators.
Another option is to remove the on-board 3.5mm, SMT, audio jack on the PCM5102 as shown below, and use “normal” sized GPIO headers.
If non-extended GPIO header is used then, as already mentioned, low-profile electrolytic capacitors may be required as they are positioned underneath the Pi Zero too.
Power Options
As previously mentioned, there wasn’t really much choice when it came to mounting the power regulator for V1 of the board, but in V2 I’ve positioned it differently to allow it to be “tab up” or upright.
The upright positioning was hopefully placed so that a long, thin heatsink could be mounted alongside the Pi. This shows one of those heatsinks you can get for M2 SSD cards. I figure that drilling a hole in it would do the trick, but I’ve not actually done this myself (see below).
The solution I went with in the end was to actually replace the 7805 with a 7805-compatible DC-DC buck converter. These are available fairly cheaply online.
These work a lot more efficiently than a 7805, so especially when drawing 300mA or so from a Pi Zero 2 whilst dropping from 12V down to 5V, they still have no need of a heatsink.
The downside of using these (apparently) is that as a switching power unit, they can be pretty electrically noisy. But as I’m powering a microcontroller rather than a pure analog circuit in the first place, I decided it probably wasn’t going to be making things much worse. This is hardly a high quality, electrically clean build anyway!
Final Assembly
Required Components to use my panel:
- MiniDexed EuroRack Panel (see Github link below).
- Raspberry Pi Zero (1 or 2) with GPIO header pins.
- MiniDexed EuroRack PCB as described above.
- Panel mount 3.5mm TRS socket for MIDI. 6mm diameter hole assumed.
- Panel mount 3.5mm TRS socket for audio. 8mm diameter hole assumed.
- 2.5mm mounting posts, screws and nuts.
I’m using the same designs of TRS sockets for MIDI and audio that I use in all my modules. These need mounting on the panel. Soldering will come in a moment.
I found that with the GPIO header height I was using, alongside the final height of the SSD1306, height of the buttons, and the encoder’s shroud, that the following mountings were required:
- 2x black nylon 2.5mm 6mm screws
- 2x black 10mm 2.5mm spacers
- 2x white 8mm 2.5mm spacers with screws
- 2x white nylon 2.5mm 6mm screws
An alternative build had a slightly larger gap (due to using 12mm buttons) so required four sets of 10×2.5mm spacers.
Another quirk of my first build was that I only had 9mm high buttons which wasn’t quite enough to reach through the panel. Ideally a 11mm or larger button would be required.
But this allowed me to 3D print a white 2.8mm diameter, 3.0mm high, extension that I could glue on the top, meaning that the exposed part of the button was white, matching the panel.
My second build used a black panel and 12mm buttons, but as already mentioned this meant the panel had to use 10mm spacers instead of 8mm spacers. One issue with that is that there isn’t much of the encoder shaft exposed. I found some knobs that worked ok, but my preferred (cheap) knobs could not be fitted and still allow the encoder switch to function.
In summary, there is still a fair bit of trial and error with each build depending on the exact combinations of screen height, encoder shaft length, button length and so on.
Once the PCB and panel is fixed together then the two 3.5mm sockets can be soldered to the PCB (or connected using headers if that was the preferred option).
Recall that MIDI IN does not required a GND connection. Also double check which solder tabs correspond to the TIP and which to the RING, which should match the “T” and “R” labels on the PCB (“S” is for shield, i.e. GND).
Testing
I recommend performing the general tests described here: PCBs.
Then, prior to plugging in the RPi Zero, do the following:
- Verify that the 12V and GND connections of the EuroRack connector have no shorts.
- Power up the board (no Pi) and verify that there is a 5V signal present and going to the PCM5102 and SSD1306. The PCM5102 should have its red power LED on.
Only then power off, plug in the RPi Zero with an SD card containing MiniDexed (configuration below) and verify that the display, encoder, buttons, MIDI IN, and audio out are all working.
MiniDexed Configuration
The following are the key MiniDexed.ini configuration options required:
SoundDevice=i2s
SSD1306LCDI2CAddress=0x3C
SSD1306LCDWidth=128
SSD1306LCDHeight=32
LCDColumns=20
LCDRows=2
ButtonPinBack=5
ButtonActionBack=click
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=6
ButtonActionHome=click
ButtonPinShortcut=11
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9PCB Errata
As already noted, there were a number of issues with the first version of the PCB, but these should have been addressed in the published version.
As the time of writing, there are no further known issues with V0.2 of the PCB.
Enhancements:
- I feel like the power situation ought to be better. One option could be to break out a USB connection to the Zero directly allowing the use of a standard “wall wart” type supply.
- Another option might be to make use of the solder pads on the rear of a Zero (like the Zero STEM does).
- It might also be useful to provide a configurable (e.g. solder bridge) link to enable the EuroRack +5V supply as an option.
- There are already options to use internal (within a rack) links for MIDI and audio if required using the pin headers on the PCB, but it might be nice to allow a choice between panel or rear connectors.
Closing Thoughts
I’m still not fully happy with the longer-term implications of how I’m powering these boards, but I’ll see how things go. Those DC-DC converters seem like a feasible option so I’ll see how they perform.
The panel height issue could be better too – it would be nice to have a recommended set of components and a known useful size of spacers, but there is still a fair bit of trial an error at the moment with each build.
Also, sometimes the display height isn’t perfect, as shown below. I might 3D print a display bezel or surround to help.
The end results looks pretty good though, so for this stage in my thinking about these, I’m pretty pleased with how this has ended up.
But one last time, just to make my position totally clear: this is a DIY system and should only be used with other DIY modules you wouldn’t mind too much losing.
It is NOT for use alongside other commercial (expensive) or treasured modules. There are commercial versions of MiniDexed apparently for that, that I have no experience of.
Kevin
-
MiniDexed EuroRack PCB Build Guide
Here are the build notes for my MiniDexed EuroRack PCB Design.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to single board computers, see the Getting Started pages.
Bill of Materials
- MiniDexed EuroRack PCB (GitHub link below)
- Front panel
- Raspberry Pi Zero (1 or 2)
- GY-PCM5102 module
- 128×32 SSD1306 OLED display module (pins order: GND-VCC-SCL-SDA)
- 1x L7805 regulator
- 1x H11L1 optoisolator
- 1x 1N5817 Schottky diode
- 1x 1N4148 or 1N914 signal diode
- 1×220Ω, 1×470Ω resistors
- 5x 10nF ceramic capactiors
- 3x 100nF ceramic capacitors
- 2x 47uF electrolytic capacitors (low profile if possible – see text)
- 1x switched rotary encoder with a threaded shroud and nut
- 2x tall tactile buttons – 6x6mm base, at least 12mm height (it needs to poke through the panel!)
- 16-way shrouded EuroRack style power header.
- 40-way GPIO header (optional: extended – see discussion).
- Pin-headers and connecting wires.
Also required: 3.5mm panel mount sockets for audio and MIDI – I use different types, but it will depend on the panel used (see panel discussion).
Build Steps
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- Resistors and diode on the top.
- H11L1 (assuming soldered directly to the PCB).
- Disc capacitors on the top.
- Diode and disc capacitor on the bottom.
- Electrolytic capacitors on the bottom.
- GPIO and 16-way power socket on the bottom.
- Buttons and encoder on the top.
- GY-PCM5102 module (see photos for steps required prior to fixing).
- SSD1306 (see photos for steps required prior to fixing).
Here are some build photos and more details of the steps involved.
Note: Most of these photos show the build for V0.1 of the PCB. There are some minor updates in V0.2 which will be noted where relevant.
The power circuit on the underside of the board has two options for mounting the regulator. It can go either vertically or horizontally, but with the tab up. Both methods use the same solder holes. Which is chosen will largely depend on what heatsink options there are.
Note: the first version of the board only had a single option, with the tab down, making contact with the PCB. This didn’t really work from a cooling perspective, hence the change.
The following “in progress” photos still show the first version of the board with the regulator the other way around, an additional resistor, omitted from V2, and the diode in a different place.
Note that low-profile capacitors may be required as they will sit underneath the Raspberry Pi Zero. If the regulator is “standing up” then it should be possible to bend the capacitors over into the space reserved for the regulator.
The GPIO headers have to allow enough space for the Zero to be mounted and not interfere with the PCM5102. See discussion below.
The EuroRack headers need to be correctly oriented and shrouded headers are strongly recommended.
The SSD1306 requires additional spacers on the pins to raise it above the PCB for presentation closer to the front panel.
The PCM5102 must have its solder jumpers configured, if not set already, and requires both sets of pin headers adding.
In the photo below, the PCM5102 has zero-ohm, surface mount resistors as jumpers – but it is really hard to see! On first glance, it looks like there is no link configured at all, but they are connected as: 1L, 2L, 3H, 4L.
These modules have to be added after the other components, as they prevent access to the solder pads during assembly.
GPIO Header Options
One option is to use extended headers, which ought to allow room for the Zero and a heatsink (if required) on the main BCM chip. Note: A V2 Pi Zero could probably benefit from a heatsink I’d imagine if running fully processing all 8 tone generators.
Another option is to remove the on-board 3.5mm, SMT, audio jack on the PCM5102 as shown below, and use “normal” sized GPIO headers.
If non-extended GPIO header is used then, as already mentioned, low-profile electrolytic capacitors may be required as they are positioned underneath the Pi Zero too.
Power Options
As previously mentioned, there wasn’t really much choice when it came to mounting the power regulator for V1 of the board, but in V2 I’ve positioned it differently to allow it to be “tab up” or upright.
The upright positioning was hopefully placed so that a long, thin heatsink could be mounted alongside the Pi. This shows one of those heatsinks you can get for M2 SSD cards. I figure that drilling a hole in it would do the trick, but I’ve not actually done this myself (see below).
The solution I went with in the end was to actually replace the 7805 with a 7805-compatible DC-DC buck converter. These are available fairly cheaply online.
These work a lot more efficiently than a 7805, so especially when drawing 300mA or so from a Pi Zero 2 whilst dropping from 12V down to 5V, they still have no need of a heatsink.
The downside of using these (apparently) is that as a switching power unit, they can be pretty electrically noisy. But as I’m powering a microcontroller rather than a pure analog circuit in the first place, I decided it probably wasn’t going to be making things much worse. This is hardly a high quality, electrically clean build anyway!
Final Assembly
Required Components to use my panel:
- MiniDexed EuroRack Panel (see Github link below).
- Raspberry Pi Zero (1 or 2) with GPIO header pins.
- MiniDexed EuroRack PCB as described above.
- Panel mount 3.5mm TRS socket for MIDI. 6mm diameter hole assumed.
- Panel mount 3.5mm TRS socket for audio. 8mm diameter hole assumed.
- 2.5mm mounting posts, screws and nuts.
I’m using the same designs of TRS sockets for MIDI and audio that I use in all my modules. These need mounting on the panel. Soldering will come in a moment.
I found that with the GPIO header height I was using, alongside the final height of the SSD1306, height of the buttons, and the encoder’s shroud, that the following mountings were required:
- 2x black nylon 2.5mm 6mm screws
- 2x black 10mm 2.5mm spacers
- 2x white 8mm 2.5mm spacers with screws
- 2x white nylon 2.5mm 6mm screws
An alternative build had a slightly larger gap (due to using 12mm buttons) so required four sets of 10×2.5mm spacers.
Another quirk of my first build was that I only had 9mm high buttons which wasn’t quite enough to reach through the panel. Ideally a 11mm or larger button would be required.
But this allowed me to 3D print a white 2.8mm diameter, 3.0mm high, extension that I could glue on the top, meaning that the exposed part of the button was white, matching the panel.
My second build used a black panel and 12mm buttons, but as already mentioned this meant the panel had to use 10mm spacers instead of 8mm spacers. One issue with that is that there isn’t much of the encoder shaft exposed. I found some knobs that worked ok, but my preferred (cheap) knobs could not be fitted and still allow the encoder switch to function.
In summary, there is still a fair bit of trial and error with each build depending on the exact combinations of screen height, encoder shaft length, button length and so on.
Once the PCB and panel is fixed together then the two 3.5mm sockets can be soldered to the PCB (or connected using headers if that was the preferred option).
Recall that MIDI IN does not required a GND connection. Also double check which solder tabs correspond to the TIP and which to the RING, which should match the “T” and “R” labels on the PCB (“S” is for shield, i.e. GND).
Testing
I recommend performing the general tests described here: PCBs.
Then, prior to plugging in the RPi Zero, do the following:
- Verify that the 12V and GND connections of the EuroRack connector have no shorts.
- Power up the board (no Pi) and verify that there is a 5V signal present and going to the PCM5102 and SSD1306. The PCM5102 should have its red power LED on.
Only then power off, plug in the RPi Zero with an SD card containing MiniDexed (configuration below) and verify that the display, encoder, buttons, MIDI IN, and audio out are all working.
MiniDexed Configuration
The following are the key MiniDexed.ini configuration options required:
SoundDevice=i2s
SSD1306LCDI2CAddress=0x3C
SSD1306LCDWidth=128
SSD1306LCDHeight=32
LCDColumns=20
LCDRows=2
ButtonPinBack=5
ButtonActionBack=click
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=6
ButtonActionHome=click
ButtonPinShortcut=11
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9PCB Errata
As already noted, there were a number of issues with the first version of the PCB, but these should have been addressed in the published version.
As the time of writing, there are no further known issues with V0.2 of the PCB.
Enhancements:
- I feel like the power situation ought to be better. One option could be to break out a USB connection to the Zero directly allowing the use of a standard “wall wart” type supply.
- Another option might be to make use of the solder pads on the rear of a Zero (like the Zero STEM does).
- It might also be useful to provide a configurable (e.g. solder bridge) link to enable the EuroRack +5V supply as an option.
- There are already options to use internal (within a rack) links for MIDI and audio if required using the pin headers on the PCB, but it might be nice to allow a choice between panel or rear connectors.
Closing Thoughts
I’m still not fully happy with the longer-term implications of how I’m powering these boards, but I’ll see how things go. Those DC-DC converters seem like a feasible option so I’ll see how they perform.
The panel height issue could be better too – it would be nice to have a recommended set of components and a known useful size of spacers, but there is still a fair bit of trial an error at the moment with each build.
Also, sometimes the display height isn’t perfect, as shown below. I might 3D print a display bezel or surround to help.
The end results looks pretty good though, so for this stage in my thinking about these, I’m pretty pleased with how this has ended up.
But one last time, just to make my position totally clear: this is a DIY system and should only be used with other DIY modules you wouldn’t mind too much losing.
It is NOT for use alongside other commercial (expensive) or treasured modules. There are commercial versions of MiniDexed apparently for that, that I have no experience of.
Kevin
-
Couple of interesting, cheap modules that seem to work pretty well with MiniDexed. Details here:
https://diyelectromusic.com/2025/03/02/almost-all-in-one-minidexed-io-options/
-
Couple of interesting, cheap modules that seem to work pretty well with MiniDexed. Details here:
https://diyelectromusic.com/2025/03/02/almost-all-in-one-minidexed-io-options/
-
Couple of interesting, cheap modules that seem to work pretty well with MiniDexed. Details here:
https://diyelectromusic.com/2025/03/02/almost-all-in-one-minidexed-io-options/