A Raspberry Pi expansion board containing a MIDI interface, DAC, and OLED display requiring only through-hole soldering skills. This is primarily intended as an all-in-one hardware solution for the mt32-pi Roland MT-32 emulator but all features are usable with Raspberry Pi OS, too.
- TI PCM5102 I2S HiFi DAC (using the ubiquitous GY-PCM5102 carrier board)
- GPIO MIDI interface with in, out, and thru
- 0.91" OLED display
- large-ish 5V bypass capacitor which may help with slightly weak power supplies
- works with mt32-pi and Raspberry Pi OS
- no SMT soldering required, so it should be suitable for clumsy DIYers like me ;)
Schematic and BOM are available in the pdf/
subfolder.
You can get a zip file with the Gerber files from the releases page and let your favorite board house build the PCB. Alternatively, you can also order directly from PCBWAY via this link for convenience. Full disclosure: If you use the link, PCBWAY will donate 10% of the PCB price to me. I want to make clear that the PCB design is completely free and you are in no way obligated or even encouraged to use that link.
In case you want to make changes to the PCB before ordering somewhere, you can use KiCAD and import the project.
⚠IMPORTANT NOTE:⚠ Before soldering down the DAC board please make sure you check the assembly instructions below about the DAC's solder bridges. Their factory configuration appears to be varying from supplier to supplier and you may need to change them.
- PCB size (height * width): 56mm * 65mm
- Layers: 2
- Minimum drill size: 0.6mm
- Minimum track size: 0.25mm (=9.84mil)
- Minimum track clearance/spacing: 0.25mm (=9.84mil)
- Surface finish: by preference (the pictured boards are lead-free HASL but pretty much anything will do)
As all components are through-hole, you should get by with basic soldering skills. It is usually the best idea to start with the flattest components and work your way up. The 40-Pin GPIO socket should be soldered on last, also remember that it goes on the bottom :).
As shown in the BOM, I recommend socketing U1 and U2 as they are the most likely casualties if defective MIDI devices are connected for some reason. Be mindful of the ICs' orientation. The notch of the 74HCT14 should be where the notch is on the silkscreen. Likewise, the H11L1's dot (marking for Pin 1) should also face the in the direction of the notch on the silkscreen. If inserted correctly, U1 and U2 will "face outward and away from each other".
It is possible to leave out some components, e.g. if you only need MIDI-In. Consult the schematic for details.
As I happily noticed people are actually really starting to build these things, I have opened the discussions page of this project. If you have questions about anything related to the board and its assembly, feel free to open a topic!
Before soldering on the DAC board please double-check that the solder bridges on the bottom of your GY-PCM5102 are configured as in the following picture:
So: 1, 2, and 4 to L and 3 to H. This should be the standard factory-set config but at least one builder encountered a board with an unconnected bridge resulting in the DAC being permanently muted. If you have a multimeter you might also want to check good connection from the board's pins to rule out bad solder joints. FLT, FMT, and DEMP should have almost 0Ω to GND while XSMT should have almost 0Ω to pin 20 (top right) of the DAC chip itself.
If yours are un- or wrongly set, you'll have to resolder them.
In standard configuration, the MIDI Thru output is available on a 5-pin header due to space constraints. If you do not need MIDI Out but want a MIDI Thru, it is possible to route the Thru signal to the MIDI-Out socket instead of the pin header. In that case, leave J4, R1, and R5 unpopulated and solder a wire between the footprint pads of J4 and R1 marked with a circle on the silkscreen, as shown in these two pictures (click for larger version):
Be sure to use some kind of standoffs or similar when connecting clumsyMIDI to the PI. Without them, the board may sit lopsided and come in contact with the HDMI port, potentially causing a short circuit. Apart from that, it's more mechanically stable and simply looks nicer :). The BOM contains the brass standoffs I am using in the pictures.
Use caution and common sense while working with electronics, especially while soldering stuff. As stated in the license, I am offering this PCB design as-is incuding any and all defects it may have and will not be held liable for any harm that comes to you or others as a result of using/building/looking at it.
Follow the setup instructions on their site and then set the following options in mt32-pi.cfg
:
usb = off
output_device = i2s
type = ssd1306_i2c
The option gpio_thru
will also work with the MIDI Out port on clumsyMIDI, so use at your preference.
You need to add the following to /boot/config.txt
to get GPIO MIDI, I2S DAC, and I2C support
enable_uart=1
dtoverlay=pi3-miniuart-bt
dtoverlay=midi-uart0
dtparam=i2s=on
dtoverlay=hifiberry-dac
dtparam=i2c_arm=on,i2c_arm_baudrate=400000
Also you need to comment out or remove the line dtparam=audio=on
Additionally for I2C support, add the following line to /etc/modules
:
i2c-dev
To get regular ALSA MIDI support you need to bridge /dev/ttyAMA0
and an ALSA MIDI port. You can do this with ttymidi
.
Once you have it compiled and installed, run the following in a terminal:
sudo ttymidi -s /dev/ttyAMA0 -b 38400
If you are asking yourself why it needs to be set to 38400 Baud: The line dtoverlay=midi-uart0
causes the Pi's UART base clock to be slightly lowered, so that 38400 (a common RS232 baud rate) effectively becomes 31250 Baud which is MIDI-compatible.
Now you when run aconnect -l
in another terminal, you should see a new MIDI client. Something similar to:
client 128: 'ttymidi' [type=user,pid=920]
0 'MIDI out '
1 'MIDI in '
Somewhat confusingly, the out/in naming is reversed because it is from the perspective of ttymidi
. That means 'MIDI in' is what it receives from another application and then forwards to the UART. So if you want to play something on a synth connected to the clumsyMIDI's output, the correct command will be
aplaymidi -p 128:1 somefile.mid
The I2C display is supported by the Adafruit SSD1306 Python library, among others.
Have fun!
clumsyMIDI ©2020 by Andreas Zdziarstek.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.