HMSynth
Keyboard Page
HMSynth MIDI
Keyboard
April
2022
I am slowly building my own Home
Made Synthesizer and that is what HMSynth stands for. At the
current time just the MIDI keyboard has been built and
tested. The synth engine will be added later. The keyboard
case was made out of sapele wood and turned out great. The
keyboard has the concept of splits built in and supports 3
independent splits (of twelve keys each) which can each have
their own MIDI channel, voicing/patch, velocity, keyboard
offset and portamento. If the joystick is moved forward,
pitch is increased. If moved backwards, pitch is decreased.
If moved to the left or right, modulation is added to the
currently selected voice.
The keyboard is powered by USB and can output MIDI messages
via the standard 5 pin MIDI connector or via USB MIDI.
I wrote most of the software which provides the keyboard
functionality with pjrc.com providing the rest. The software
runs on an embedded Teensy 3.6. I used the Teensy because it
has plenty of digital and analog I/O pins, has lots of
memory and is quite powerful.
The Teensy microcontroller scans the keyboard for key
presses as well as all of the controls on the control panel.
It also manages the SPI LCD display. All in real time with
no hint of latency.
The code for the keyboard is available here.
In the distant past I designed a hardware MIDI synthesizer
based upon the SAM-2195 chip and a Teensy 3.1. That devices
pairs nicely with the new MIDI keyboard described here. You
can read about the MIDI Buddy at:
http://craigandheather.net/docs/Lindley_MIDIBuddyArticle.pdf
Here is the control panel for the MIDI keyboard.
The following is a summary of the control functionality.
Control
|
Single Click Functions
|
Double Click Functions
|
Long Click Functions
|
PB1
|
Portamento On/Off
|
All Notes Off
|
Keyboard Reset
|
PB2
|
Split Octave Up
|
Split Patch Increment
|
|
PB3
|
Split Octave Down
|
Split Patch Decrement
|
|
Rotary Encoder
|
Menu Selection
|
Menu Return
|
Splits Channels Set*
|
The four control pots send MIDI control change messages.
They are also split aware, sending CC messages to the
active split.
By default Pot1 controls portamento time.
Pot2 control volume.
Pot3 controls panning.
Pot4 controls reverb.
Of course the CC messages associated with each Pot can be
changed via configuration.
The rotary encoder manages the keyboard's configuration.
All aspects of the keyboards operation can be controlled via
a nested menuing system.
*If the rotary encoder is given a long click it sets Split1
to MIDI channel 1, Split2 to MIDI channel 2 and Split3 to
MIDI channel 3.
Here are some pictures of the finished keyboard
Questions and comments to me
Craig at: calhjh@gmail.com