#USBHost

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-06-27

XIAO ESP32-C3 MIDI Synthesizer – Part 4

In Part 2 I looked at how to add USB MIDI to the XIAO MIDI Synthesizer and in Part 3 I looked at some of the properties of the SAM2695 synth chip itself. This post combines the two into a relatively simple, but playable, synth.

  • Part 1 – Getting started and getting code running.
  • Part 2 – Swapping the ESP32-C3 for a SAMD21 to get USB MIDI.
  • Part 3 – Taking a deeper look at the SAM2695 itself.
  • Part 4 – A USB MIDI Synth Module using the SAMD21 again as a USB MIDI Host.
  • Part 5 – A Serial MIDI Synth Module using the original ESP32-C3.
  • Part 6 – Pairs the Synth with a XIAO Expansion board to add display and potentiometers.

https://makertube.net/w/kaZT6zPjKUmGQp17J15fMM

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

These are the key tutorials for the main concepts used in this project:

If you are new to microcontrollers, see the Getting Started pages.

The Circuit

I’m wanting to plug a USB MIDI keyboard into my XIAO Synth, so I’m going to swap the XIAO ESP32-C3 out once again for a XIAO SAMD21 as described in Part 2. A future post will go back and create a serial MIDI version using the unmodified XIAO Synth.

Recall that a source of 5V power is required, and below I’m just using the 5V USB passthrough from the original XIAO ESP32-C3.

There is one issue to watch out for in this kind of configuration. Depending on how the USB power is provided, there might not be a common ground point between the XIAO’s power and any audio amplification used.

Apparently GND is always passed through many USB charger blocks.

To prevent interference and noise, it may be necessary to ground the USB connection providing power.

The Code

I’m using a combination of the SAMD21 USB Host Library “USB MIDI Converter” example and some GPIO and MIDI handling.

The general thread of the code will be as follows:

loop():
Do any USB host processing (e.g. plug-and-play)
IF USB MIDI messages received THEN
Send to serial MIDI
IF any buttons pressed THEN
Handle button IO
Generate any additional MIDI messages as required
Send to serial MIDI

In particular it should be noted that the MIDI “listening” is one-way only USB to serial MIDI; and that any internal control events that generate MIDI are also only going one way – to serial MIDI.

The buttons will be used to do the following:

  • Button 0 and 1: Program Select Up/Down
  • Button 2 and 3: Channel Volume Up/Down

A much more sophisticated interface could be developed – e.g. using one of the buttons to change modes for the other buttons, to allow the selection of different things, but for now, this is plenty.

There are several layers to the code to allow this however, so I’ll cover them briefly here.

  • Main Loop button IO: Checks for the main H->L, L->H, L->L, H->H events and calls functions for all but the last (buttons are pulled high so H->H means “nothing happening).
  • Event functions for Pressed, Released, Hold which call program or volume handling functions as required.
  • Program/volume handling functions that update the values and then trigger the appropriate MIDI messages to be sent.
  • Functions to send a MIDI Program Change or Control Change message as required.

In the end I’ve only triggered events on button Pressed, so the Release and Hold functions don’t cause any further action to take place, but the model is there for use in the future if required.

Note: as I’m not using the Arduino MIDI Library, I just build PC or CC messages directly and call out to Serial1.Write as shown below.

void midiSendControl (uint8_t cmd, uint8_t d) {
uint8_t buf[3];
buf[0] = MIDI_CC | (MIDI_CHANNEL-1);
buf[1] = cmd;
buf[2] = d;
Serial1.write(buf, 3);
}

Simple, but it works. Note PC are only two bytes in size not three.

If performance seems to be an issue, then I have a few things to adjust in the scheduling:

  • I can split the digitalRead() of each button over several scans to allow MIDI processing to happen in between.
  • I can switch to the XIAO equivalent of direct PORT IO to try to read all IO pins at the same time. I don’t know what this looks like for the SAMD21 however and it would make it hardware specific, so I’d really rather not do that.
  • I can remove the waiting of 1mS. This was in the original USB converter, so I kept it in here too. I ought to measure the free running loop() time to see if it is needed.

Find it on GitHub here.

Closing Thoughts

In the video I cycle through a few of the programs whilst controlling the synth from a keyboard.

At one point I remove the external audio connection (yes, I should have turned it down first!) to contrast the sound with the internal speaker. Yes, it is a bit “tinny” but it isn’t too bad.

This really is just the very “tip of the iceberg” given the whole range of parameters available that were mentioned in Part 3.

Kevin

#controlChange #midi #programChange #SAM2695 #samd21 #usbHost #xiao

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-06-27

XIAO ESP32-C3 MIDI Synthesizer – Part 2

After an initial play with the XIAO ESP32-C3 MIDI Synthesizer the first thing I wanted to try was to swap out the ESP32-C3 for something else, just to see what could be done.

  • Part 1 – Getting started and getting code running.
  • Part 2 – Swapping the ESP32-C3 for a SAMD21 to get USB MIDI.
  • Part 3 – Taking a deeper look at the SAM2695 itself.
  • Part 4 – A USB MIDI Synth Module using the SAMD21 again as a USB MIDI Host.
  • Part 5 – A Serial MIDI Synth Module using the original ESP32-C3.
  • Part 6 – Pairs the Synth with a XIAO Expansion board to add display and potentiometers.

The XIAO range of boards support a range of options and Adafruit’s QTPy boards are also pin-compatible. For me, I have the following as possibilities:

  • XIAO SAMD21
  • XIAO RP2040
  • QTPy SAMD21
  • QTPy ESP32-C3

I also already have a range of projects that have looked at some of the above: https://diyelectromusic.com/tag/xiao/

So before I get too far into what the SAM2695 itself can do, I thought I’d try a few alternative options right from the start. This post looks at how to use the XIAO SAMD21 to support USB access to the Synth.

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

These are the key tutorials for the main concepts used in this project:

If you are new to microcontrollers, see the Getting Started pages.

XIAO SAMD21 as a USB Device

My CircuitPython USB to Serial MIDI Router uses a XIAO SAMD21 in USB Device mode, so replacing the ESP32C3 with a SAMD21, should allow it to be used as a USB MIDI device.

The principle is exactly the same as the previous project but instead of a serial MIDI interface connected to the XIAO UART, it is connected directly to the SAMD21.

This should work just as well with a QTPy SAMD21 too.

There are two options for USB MIDI device support:

Using CircuitPython

The following steps are required for the CircuitPython version which, when it works, is the simplest:

When I first tried this, everything hung up. It turned out that the XIAO needs to use board.LED_INVERTED as the built-in LED label. Once that was updated all was good.

I also, as a precaution, added the following to boot.py:

import usb_hid, usb_midi
usb_hid.disable()
usb_midi.enable()

But this is probably unnecessary for the XIAO SAMD21.

The XIAO pops up as a USB MIDI device called “CircuitPython Audio” and any MIDI commands (such as note, Program Change, or control messages) sent to the device are forwarded directly onto the SAM2695 synth.

Whilst this is the simplest way to do this, it isn’t the most performant! Will a lot of notes (like my Rite of Spring example) some MIDI messages might not be accurately processed in time and others might get lost.

Using Arduino

It just so happens that the code I used for XIAO SAMD21, Arduino and MIDI – Part 4 “just works”. It is a little over the top, in that it sets up three serial ports, so will almost certainly clash with something else on the synth, but it does work if no buttons are pressed!

Use the code from: https://github.com/diyelectromusic/sdemp/tree/main/src/SDEMP/XiaoSimpleUSBMIDIMerge

Download this using the “Seeeduino XIAO” board setting in the Arduino IDE and it should appear as a USB MIDI device called “Seeed XIAO M0” or something like that.

Performance wise, this passes the Rite of Spring test very well.

Alternatively, the code from XIAO USB Device to Serial MIDI Converter focusses more directly on the USB to serial conversion and includes an option for serial to serial routing too, which is more useful in this particular case.

XIAO SAMD21 as USB Host

In the post XIAO SAMD21, Arduino and MIDI – Part 5 I used the SAMD21 as a USB host. By providing an external power supply this allow the use of a USB MIDI controller with the SAM2695.

To plug anything in however will require an adaptor or two. This needs to go from an original “USB A” plug to a USB-C socket. For me, this involved using a “USB-C to USB-micro” adaptor and then a “USB OTG adaptor” as shown below.

Then I needed a 5V power source, so I cheated and use the 5V and GND from the original XIAO ESP32-C3 that I’d replaced with the XIAO SAMD21 and just jumpered them across to 5V and GND from the breakout headers on the synth.

I stayed away from the code I used as part of XIAO SAMD21, Arduino and MIDI – Part 4 directly, but instead used one of the sample applications from the SAMD21 USB Host Library.

I turns out the “USB_MIDI_Converter” sketch works really well. This can be found here: https://github.com/gdsports/USB_Host_Library_SAMD/blob/master/examples/USBH_MIDI/USB_MIDI_converter/USB_MIDI_converter.ino

Closing Thoughts

Similar tricks should also be possible using the RP2040 based boards, and as already mentioned it is also possible to use the Grove connector. One of the options for Grove is as a UART, and this is supported, for example, on the original XIAO breakout board: https://wiki.seeedstudio.com/Seeeduino-XIAO-Expansion-Board/

I believe the UART Grove socket would connect directly to the Synth Grove connector allowing use of the synth from the expansion board too.

Kevin

#esp32c3 #midi #SAM2695 #usbDevice #usbHost #xiao

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-23

Arduino Pro Mini MIDI USB CV PCB Build Guide

Here are the build notes for my Arduino Pro Mini MIDI USB CV PCB Design.

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

  • Arduino Pro Mini USB MIDI Host CV PCB (GitHub link below)
  • Arduino Pro Mini (3V3/8MHz version)
  • Mini USB Host Shield 2.0
  • 1x H11L1
  • 1x MCP6232
  • Diodes: 1x 1N4148 or 1N914 signal diode; 2x BAT43 Schottky
  • Resistors: 10Ω, 33Ω, 1x 220Ω, 330Ω, 470Ω, 3x 1K, 2K7, 5K6, 2x 10K (*)
  • Ceramic Capacitors: 4x 100nF (*)
  • 1x 3.5mm stereo TRS
  • Either 2x 3.5mm stereo TRS OR 2x 5-pin, 180 degree MIDI DIN sockets
  • Pin headers
  • Optional: 2x 12-way pin header sockets
  • Optional: 1x 6-way DIP socket; 1x 8-way DIP socket

* The PCB shows the use of 2x 10nF and 2x 200Ω resistors for the PWM filter part, but 100nF and 1K work much better.

Optional: Power circuit

  • 7805 regulator
  • Electrolytic Capacitors: 1x 10uF, 1x100uF
  • Ceramic Capacitors: 1x 100nF
  • 1x SPST power switch 2.54mm pitch

Build Steps

Taking a typical “low to high” soldering approach, this is the suggested order of assembly:

  • Diodes
  • Resistors
  • DIP sockets (if used) and TRS sockets (if used).
  • Disc capacitors.
  • Switches (if used).
  • Jumper headers.
  • Electrolytic capacitors (if used).
  • DIN sockets (if used).
  • 7805 (if used).
  • Arduino + USB Host Shield (see notes below).

The Arduino Pro Mini and USB Host Shield need to be soldered together as a unit. If using header sockets, these will require longer header pins and will need soldering together as a single unit “off board”.

If not using sockets, normal pin-headers should suffice, in which case it is probably easier to solder the pin headers to the PCB and then add the USB Host shield, followed by the Pro Mini.

The USB Host shield requires a track cutting and a connection made from the Arduino’s VIN to the shields VBUS pad. See photos and discussion in the text.

Note: the PCB incorporates a capacitor on the CV PWM output to the TRS socket. This would be required if this was an audio signal to remove the DC bias. But as this is a CV output, the capacitor should be replaced with a simple wire link. More on that below.

Here are some build photos.

The two 220Ω resistors should be replaced with 1K instead.

If using MIDI TRS sockets, these should be added, along with the CV/Gate socket, next with the (optional) DIP sockets.

I’m going to use MIDI DIN sockets, so they will be left almost to last.

The MIDI on/off is required to disabled MIDI to allow sketch uploading to the Pro Mini. This can be replaced with 2×3 pin headers and jumpers, or if the Pro Mini will be removed for programming, even wire links.

I’m using a DPDT slider switch with a 2×3 2.54mm pitch.

The two 10nF capacitors should be replaced with 100nF capacitors instead.

If using 2x 12-way header sockets for the Arduino, these can be added at the same time as other pin headers next.

I’m planning on soldering my USB Host shield and Pro Mini directly to the board, so the best way to do that seems to be to add the headers to the board, as shown below, then I’ll add the shield and Pro Mini later.

The power circuitry is optional. This allows a 7-12V DC barrel jack (centre positive) to be used to create the required 5V for the Pro Mini and USB.

Alternatively, there is a 5V/GND direct jumper header that may be used instead. This should not be used to power the board if the regulator is fitted, but can be used as a 5V source if required.

Note: as already mentioned, when adding the electrolytic capacitors, the 10uF next to the CV TRS socket should be left out and replaced by a wire link.

The full photo below shows the capacitor present – I had to remove it!

The MIDI DIN sockets, if used, are the last component apart from the Arduino itself.

I will be stacking the USB shield and Pro Mini, so the shield goes on next. Note: there is a track that requires cutting between the VBUS solder pad and the 2K2 resistor as shown below. Note, this track must not be cut between the USB socket and the VBUS pad…

Cutting this track removes the connection between the USB VBUS lines and VCC on the PCB, which is running at 3V3. Once cut, a wire can then be soldered between the VBUS pad and the pin that will eventually connect to the Pro Mini’s VIN pin as shown below.

At this point the Pro Mini can now be added on top. I’ve not used any additional spacers, simply relying on the existing solder on the pin headers (from the USB shield) and the presence of the patch wire to distance the board enough. The pin headers themselves weren’t long enough, for me, to add proper plastic spacers, so I didn’t.

Testing

I recommend performing the general tests described here: PCBs.

The sample application section below lists some sketches that will test the various functions of the board.

An oscilloscope can be used to check the voltage output from the PWM signal.

PCB Errata

There are the following issues with this PCB:

  • As already mentioned, there are two issues with the CV output circuit:
    • The electrolytic capacitor should be replaced with a wire link.
    • The 10nF and 220Ω resistors in the filter should be replaced with 100nF and 1K.

Enhancements:

  •  The CV and GATE signals are different levels at present. CV is 0-5V; GATE is 0-3.3V. Perhaps they ought both be 5V signals.

Find it on GitHub here.

Sample Applications

The following GPIO pins are used with this PCB:

D0/D1RX/TX for Serial MIDID2GATE outputD3PWM CV outputD9INT pin for USB Host shieldD10-D13SPI link to USB Host shield

Here are some applications to get started with.

Note: I found that serial MIDI would not work when powered via the programming header, presumably because my programmer was controlling RX/TX. To test MIDI the board had to be powered via the barrel jack or 5V directly.

Also recall that MIDI needs to be OFF in order to upload sketches.

For the last two, some minor code changes are required.

For toneMelody, the pin used need changing from pin 8 to pin 2 in the tone() and noTone() calls.

For the PWM output, the following configuration options must be set:

//#define FREQPOT A0
//#define PIN_9_PWM_OUTPUT 1 // Uses Timer 1
#define PIN_3_PWM_OUTPUT 1 // Uses Timer 2

In both the GATE and PWM test, it is actually possible to hook up a speaker via a stereo 3.5mm jack to the CV/GATE TRS socket.

WARNING: If you do this, the speaker will be receiving a 0-5V signal on either the L or R outputs (depending on the test). This is a lot more than a line input signal (which is typically +/- 0.8V) so do not hook this up to standard audio input.

Alternatively, just check the signals via the GATE/CV jumper header with an oscilloscope.

The PWM output should be 0-5V. The GATE output should be 0-3.3V.

Use as a USB to CV/GATE Converter

The CV/GATE TRS output follows the standard set for the Korg Volca Modular (see Korg Volca Notes).

I show how to use this as a USB MIDI interface for a CV/GATE synth here: USB MIDI to Serial and CV/GATE.

IMPORTANT: Do not use this board with your Korg Volcas unless you know what you are doing, are able to validate all signals prior to connection yourself, and happy with the very real possibility that the board might do something that damages the Volca.

I am not an electronics person and will not be responsible for damage to expensive or treasured equipment. I only use cheap or disposable equipment in my own projects.

Closing Thoughts

Adding that capacitor was a case of me running on “autopilot” I think, but that is a straightforward fix, so no real harm done.

At the end of the day, this whole board is a little niche, even by my standards.

But it seems to work well enough that I can get on with writing some proper firmware for it now.

Kevin

#arduinoProMini #cv #korg #midi #pcb #pwm #usbHost #usbHostMidi #volca

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-23

Arduino Pro Mini MIDI USB CV PCB Design

This is essentially a version of my Korg Volca Modular MIDI to CV PCB Design merged with my Arduino Pro Mini MIDI USB HOST PCB Design to give me USB MIDI to serial MIDI and CV.

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.

The Circuit

As previously mentioned this is largely a merging of two existing designs. The main elements are:

  • Arduino Pro Mini (3V3/8MHz) with optional USB Host Shield already attached.
  • 3V3 compatible Serial MIDI IN/OUT circuit.
  • 5V power circuit via a 7805 regulator feeding the VIN of the Pro Mini.
  • PWM output filter.
  • 3V3 to 5V opamp amplifier stage (largely based on HAGIWO’s designs).
  • Korg Volca compatible Gate/CV out via a TRS socket.

I’m using a MCP6232 rail-to-rail dual OpAmp, but I’m only using one of them, so apparently good practice dictates normalising the input of the unused OpAmp to ideally the mid-voltage of the power rails, which I’ve done using two resistors as a potential divider.

The OpAmp is set up for a noninverting amplifier aiming for, as I understand things, a gain of 5/3.3 or ~1.51 as follows:

  • Non-Inv Gain = 1 + R(feedback) / R(toground) = 1 + 2K9 / 5K6 = 1.51

Note: the capacitor in the PWM output circuit is actually an error. It isn’t required for a CV output.

Also, the CV output is amplified to make it a 0-5V signal, but the GATE output remains a 0-3.3V signal.

A note on the PWM Filter.

The circuit was originally pasted on from somewhere else and I have to confess I didn’t think about the differing nature of a PWM circuit for a control voltage compared to audio.

As such, the stated component values of 220Ω and 10nF, with a cut-off frequency of upwards of 70kHz whilst useful for audio, are pretty useless for a CV. In the actual build, I’ve used values of 1K and 100nF which gives a cutoff frequency of around 1.5kHz.

That will teach me to properly think about my requirement before cutting and pasting in one of my previous circuits 🙂

PCB Design

Unlike my last design this one assumes the USB host shield will be fixed to the Pro Mini, keeping the footprint as small as possible.

I’ve allowed for both MIDI DIN and TRS sockets. There is also an option for individual GATE and CV out via jumper headers in addition to the Korg Volca compatible TRS.

I’ve included a MIDI switch with the footprint of a 2×3 set of 2.54mm headers so that could be jumpers or a switch as required. If the Pro Mini is socketed (which isn’t so easy if a USB Host shield is attached, but would be possible with longer pin headers), then the MIDI switch could be omitted. It is only there to disconnect MIDI from the Pro Mini UART when uploading sketches.

There is a bit of space around the 7805 in case a small heatsink is required. There is also the option to power the board directly from a 5V supply via a two-pin jumper header.

The Pro Mini footprint includes the programing header, but this isn’t used on the board and should probably be ignored.

Closing Thoughts

My previous MIDI to CV was code for an ATtiny85, so I’ll need to rewrite the code for the ATMega328 on the Pro Mini to support the USB to Serial MIDI routing in addition to CV and GATE.

Kevin

#arduinoProMini #cv #korg #midi2cv #pcb #usbHost #volca

diyelectromusicdiyelectromusic
2025-05-23

Design for a simple Arduino Pro Mini + USB Host prototyping board.

diyelectromusic.com/2025/05/23

Photo showing the described DIY PCB in use.  It is a rectangular PCB 100x35 mm.  An Arduino Pro Mini and mini USB Host shield are mounted on the board.  The board has power from a barrel jack and the photo shows a USB MIDI keyboard plugged into the USB socket on the mini USB Host shield.
Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-23

Arduino Pro Mini USB Host Proto PCB Build Guide

Here are the build notes for my Arduino Pro Mini USB Host Proto PCB.

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

  • Arduino Pro Mini USB Proto PCB (GitHub link below)
  • Arduino Pro Mini (3V3 version)
  • Mini USB Host Shield 2.0
  • 2x (or 4x) 12-way pin header sockets
  • Pin headers

Power supply (optional):

  • 1x 7805 regulator
  • 1x 2.1mm barrel jack socket (see photos and PCB for footprint)
  • 1x 100nF ceramic capacitor
  • 1x 10uF electrolytic capacitor
  • 1x 100uF electrolytic capacitor
  • Optional: 1x slider switch, PCB mount, 2.54mm pitch connectors

The power supply section can be omitted if the board is to be powered directly off 5V, for which an additional 5V/GND set of pin headers is provided.

Build Steps

There isn’t a particular assembly order for this board, but I built it in the following order:

  • Prepare the mini USB Host shield (see below).
  • Header pins for the mini USB Host shield.
  • Header sockets for the Pro Mini.
  • Components for the power supply.

The Mini USB Host shield will probably require a track cutting to isolate VBUS from the 3V3 supply of the Pro Mini. The track in question links the VBUS solder pad to the nearby 2K2 resistor. The track needs to be cut between the pad and the resistor, but care is needed to ensure it isn’t cut on the “USB” side. See photo below.

Here are some build photos.

Notice in the above there is an additional single pin for the VBUS connection. I’ve used pin headers rather than a socket to allow me to mount the USB Host shield permanently on the board.

If a socket is used then it will be necessary to find an alternative means to connect the VBUS pad on the shield to the VBUS or 5V connection on the PCB.

I’m not using any headers for the Pro Mini’s programming connection. This doesn’t actually do anything on the PCB and is really just there for helping to orient the board.

In the following, I’ve only actually soldered the pins on the USB Host shield that are used to connect it to the Pro Mini. There are 9 in total, not including VBUS, and all, apart from a second GND, are labelled on the PCB:

  • Top four pins on the left (SS, MOSI, MISO, CLK).
  • Topmost single pin on the right (IN).
  • GND and 3V3 on the left (2nd and 4th from the bottom).
  • GND and RST on the right (3rd and 4th from the bottom).

If used, I soldered the power supply components last.

Testing

I recommend performing the general tests described here: PCBs.

Note: when programming the Pro Mini an additional programming header is required.

Some of the cheap programmers do not accurately set the voltage for powering the board, even if there is a switch for 5V/3V3 operation, so it is worth double checking prior to use.

If an external 5V connection is required, the additional GND/5V header pin at the bottom of the USB Host shield can be used.

PCB Errata

There are the following issues with this PCB:

  •  None at this time.

Enhancements:

  • I’ve included a footprint for the programming header, but it doesn’t do anything or go anywhere. 

Find it on GitHub here.

Sample Applications

Here is a simple USB MIDI monitor application that can be used to see if the board is working:

Closing Thoughts

As I say, I’m not sure this will get a lot of use, but it can go in the bits box for a rainy day!

Kevin

#arduinoProMini #pcb #usbHost

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2025-05-23

Arduino Pro Mini USB Host Proto PCB Design

This is a prototyping board for an Arduino Pro Mini and mini USB Host shield.

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.

The Circuit

This is mostly just breaking out the pins for an Arduino Pro Mini onto a set of additional headers for use with a mini USB Host shield.

There are additional headers for power and GND and it includes the option for powering via a 7-12V barrel jack into via a 7805 regulator or directly via 5V into a set of jumper header pins.

PCB Design

In previous designs I’ve opted to assume that the USB host shield will be mounted directly onto the Arduino Pro Mini, but this time I’ve separated them out for more flexibility.

I may decide I should have just left them together, but I didn’t think I’d be able to use pin headers and sockets in quite the same way with the headers already connecting two boards.

With hindsight I’m now wondering if I should have passed through all the Arduino Pins to the shield part. As it stands, it only has the connections required for the USB host shield.

All of the pins are broken out either side of the prototyping area however, but only the usable pins have been labelled.

Closing Thoughts

This was a somewhat speculative build based on the idea that I’d want to experiment with a USB host device and some additional circuitry.

But my main need has been satisfied by an alternative build (more on that later), so for now this is probably a “why not, might come in useful” build.

Kevin

#arduinoProMini #pcb #usbHost

Christian Beerchbeer
2025-02-08

Do I eventually know somebody who knows about Zephyr's UHC driver API? I try to get into it and am looking for samples (or even How-Tos) but without luck... any hints would be appreciated.
-s3

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2024-07-25

Here are the build notes for my Arduino Pro Mini MIDI USB HOST PCB.

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.

Bill of Materials

  • Arduino Pro Mini MIDI USB HOST PCB (GitHub link below).
  • EITHER: Arduino Pro Mini 3V3/8MHz version plus mini USB Host shield (see photo).
  • OR: Adafruit Trinket M0 plus “OTG” adaptor (see below).
  • 1x H11L1 optoisolator.
  • 1x 1N914 or 1N4148 signal diode.
  • 1×10Ω, 1×33Ω, 1×220Ω, 1×470Ω resistors.
  • 2x 100nF ceramic capacitors.
  • 1x 10uF electrolytic capacitor.
  • 1x 100uF electrolytic capacitor.
  • 1x 7805 regulator TO-220 format.
  • EITHER: 2x 5-pin MIDI DIN sockets (pcb mount, see photos for footprint)
  • OR: 2x 3.5mm stereo TRS sockets (pcb mount, see photos for footprint).
  • 2x 2.1mm barrel jack sockets (pcb mount, see photos for footprints).
  • 1x 6-pin DIP socket (optional).
  • 1x 3-pin slider switch (optional).
  • 2x jumpers.
  • Pin headers.
  • Pin header sockets for microcontroller (optional).

Build Steps

Taking a typical “low to high” soldering approach, this is the suggested order of assembly:

  • All resistors and diode.
  • DIP socket and TRS sockets (if used).
  • Disc capacitors.
  • Slider switch (2.54mm pitch connectors).
  • Jumper headers.
  • Pin header sockets for microcontroller (if used).
  • Barrel jack sockets.
  • Electrolytic capacitors.
  • 7805 regulator.
  • DIN sockets.
  • Microcontroller (see notes if using the Arduino Pro Mini).

Here are some build photos.

The capacitor within the footprint of the Arduino Pro Mini has to be mounted flat. Alternatively it could be mounted on the underside of the board.

If TRS sockets are required, these are added next.

Otherwise continue on with the other components in whatever order appears to make sense.

Adafruit Trinket M0 Version

If the Adafruit Trinket M0 is used that can be added directly into the appropriate sockets.

IMPORTANT: The Trinket requires power via one of its pins which overlaps with the footprint of the Arduino Pro Mini. This means that the following solder jumper must be soldered to make the link to the 5V in.

The Trinket itself should be mounted as shown below. The photos also show a “USB OTG” adaptor which will also be required.

Arduino Pro Mini Version

The Pro Mini needs connecting to the mini USB Host shield, but before that there is one patch required to the USB Host shield to allow it to support 5V USB operation.

As it comes, the USB VCC line is connected to the main power line of the USB Host shield, but as the shield runs at 3V3 volts, this means USB is also running at 3V3 volts. This apparently can work for many devices, but not all, but there is a way to support 5V operation when used with an Arduino Pro Mini as long as the Pro Mini is powered via its RAW input with a 5V supply. This is what I’m doing here.

To enable 5V option, a PCB trace has to be cut as shown below (just down and to the left of the first hole near the top of the board next to the USB socket).

Header pins link the two boards together, but they will also have to be used to connect to the main PCB. I’ve used normal sized header pins, but notice how they are soldered on “upside down” – i.e. the longer part of the pin is above the PCB and that is the side that is soldered on.

Then the VBUS pad/connector needs patching over to the pin to hook up to the RAW connection on the Pro Mini.

I’ve mounted the Arduino on top of the shield. If the Arduino hasn’t been programmed, then programming header pins will also be required.

Warning: If using a programmer with a slider switch to select between 5V and 3V3, the cheap ones (like the one I have) DO NOT change the VCC voltage – only the UART logic levels. For mine, I need to select 3V3 via the slider switch and then connect 5V to RAW not to the VCC programming input. Check the voltages prior to using if you’re not sure.

With no VCC/5V connection once the Arduino is installed I can only reprogram it if it is powered independently of the USB programming link – i.e. via the barrel jack.

Additional MIDI Indicator

Once I started testing it, I wanted to enable a MIDI LED. Usually I’d use the built-in LED for this, but that is on pin D13 which is in use for the SPI interface to the USB host shield.

Instead I soldered on an LED and 1K resistor between D2 and GND as shown below.

The anode (long leg) of the LED is soldered to D2 and the resistor is soldered between the LED and GND.

Testing

I recommend performing the general tests described here: PCBs.

It is worth checking the operation of the 5V power supply independently.

It may also be worthwhile checking the operation of the USB host functionality on the microcontroller prior to fixing to the board.

PCB Errata

There are the following issues with this PCB:

  • The silkscreen for the on/off switch implies (to me) that up is “off”, but up is actually “on”. I’d either label it as OFF/ON or reroute the traces to match.

Enhancements:

  •  A slightly better arrangement for the MIDI sockets could be on opposite sides of the board. This could allow for a MIDI and power IN on one side and MIDI and power OUT on the other. However, if used standalone, then actually having them side-by-side possibly makes more sense anyway.
  • I can’t use the on-board LED for indications as that is on D13 which is required for the SPI link to the host board, so incorporating an additional LED would be useful.
  • It might also be useful to have a RAW/5V IN header for direct powering of the board, especially when programming in situ.

Find it on GitHub here.

Sample Applications

The Arduino can be programmed using the following:

The Trinket can be used with the following:

Closing Thoughts

In the video at the start of this post you can see my board being used to power and drive (over MIDI) my Shruthi, which to be honest, was the main reason for making it!

Now I just need to make a couple of neat, custom MIDI and power cables to link the two together.

Kevin

https://diyelectromusic.com/2024/07/25/arduino-pro-mini-midi-usb-host-pcb-build-guide/

#arduinoProMini #midi #pcb #shruthi #trinket #usbHost #usbHostMidi

Simple DIY Electronic Music Projectsdiyelectromusic.com@diyelectromusic.com
2024-07-25

I’ve finally decided to create a PCB for my Mini USB-MIDI to MIDI USB Host MIDI converter based on an Arduino Pro Mini and a Mini USB Host Shield.

Whilst I was at it, I’ve also included an option to support the USB-MIDI to MIDI Revisited build based on an Adafruit Trinket M0.

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.

The Circuit

This essentially provides a 3V3 Arduino Pro Mini or Trinket M0 serial MIDI interface with a built-in power regulator to generate a 5V supply. Both the Arduino Pro Mini and Trinket M0 have a “RAW” power input, but unlike many 5V microcontroller dev boards, these only accept up to around 6V.

In order to support MIDI USB host functionality, the Arduino Pro Mini requires a mini USB Host shield (see photos in the build guide, these are readily available online); the Trinket M0 can support it directly using a simple USB OTG adaptor.

I’ve include power in and out sockets to allow power “pass through” if used with another device.

PCB Design

The board will support either the 3V3 Pro Mini or the Trinket M0, so an overlapping footprint is provided for them both.

One complication is that the Trinket’s power pin overlaps with a standard IO pin when used with a Pro Mini. I’ve solved that by including a solder bridge between that pin and 5V. The default is unbridged, so set for the Pro Mini.

Pin headers for jumpers have been provided to disable the UART RX/TX from the MIDI circuit to allow for programming, although programming will be a lot easier with the devices removed from the board anyway – especially as the Pro Mini requires an external programmer.

I’m still struggling with a sensible footprint for an on/off switch, but I’ve picked one that I think matches some switches I have on order!

The footprint allows for either TRS or serial DIN MIDI sockets.

Closing Thoughts

I’m hopeful this will work ok as both variants of the board have been shown to work in proto-board or breadboard projects in the past.

Kevin

https://diyelectromusic.com/2024/07/25/arduino-pro-mini-midi-usb-host-pcb-design/

#arduinoProMini #midi #pcb #trinket #usbHost #usbHostMidi

2023-08-23

ESP32 WiFi to USB Host to 3DPrinter (playing Imperial March)

makertube.net/videos/watch/ae0

Ich würde mir für Smartphones DIP-Schalter wünschen, womit man sämtliche verbauten Geräte hardwareseitig ein- oder ausschalten kann, die man nicht nutzen möchte #WLAN #Bluetooth #Mikrofon #Kamera #Telefon #NFC #USBHost #IR #GPS #Mäuseklavier https://de.wikipedia.org/wiki/DIP-Schalter

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst