MidiBud

MidiBud is discontinued as of 3/15/2015, please check MidiGAL which has similar functionality.

MidiBud is a DIY MIDI controller with 16×2 LCD, EEPROM, clickable encoder and 5 buttons. The design is based on Mutable Instruments MIDIpal.

MidiBud-v03#1

Features:

  • Atmega 328p MCU
  • 24LC512 EEPROM
  • MIDI In/Out LEDs
  • AVR ISP connector

Eagle .sch/.brd files and a .hex with MIDIpal firmware adapted for MidiBud can be downloaded here. Source code is available on GitHub .

MidiBud schematics in PDF format. BOM is available here.

MidiBud_v0.2_brd

MidiBud is also useful as a “breadboard friend” for all sorts of MIDI related projects: with it’s simplistic “direct to MCU” I/O you can hook its MIDI ports, LEDs, LCD, EEPROM, 5 x switches and encoder to a prototype setup using MidiBud’s MCU socket:

MidiBud_BBF (small)

NOTE: If you’re using MidiBud with ATmega644 MCU on a breadboard (like you see on the picture above) you’ll need to add 1K series resistor in line and 220pf cap to ground to form a low pass filter on RX0 line, otherwise your code will crash soon after it receives MIDI input due to random memory corruption caused by silicon bug, see here.

MidiBUD production PCBs from itead run:

MidiBud_BluePCB (small)

MidiBUD v0.3 PCBs: improved routing and added two pin header next to DC connector carrying GND and +5V. Eagle files are here: MidiBud_v03

MidiBud-v03 (small)

IMPORTANT!

MidiBud v0.3 PCB has a “missing connection” error. Luckily, the problem could be fixed with a single jumper wire:

MidiBud-v03#2

Update: MidiBud v0.3 PCBs are all gone as of 6/17/2014. Updated v0.4 PCBs are available.

Firmware: midibud_v093

Ordering MidiBud

To order MidiBud, please send an email to pete at kvitek c o m specifying how many PCBs and pre-programmed MCUs you need, a country where to ship them, and an email address to send the PayPal invoice to.

MidiBud PCB — $20

Pre-programmed ATMega328p — $10

Continental USA — $5 (California residents add 8.75% tax)
Canada — $7
Europe — $10
Australia — $10

Please make sure your PayPal shipping address is correct!

 

102 thoughts on “MidiBud

  1. Hello! Amazing project 🙂 I just found MIDIBud, have to say Im impressed, is exactly what I was looking for since I knew of the Minicommand by Ruin and Wesen… MIDIPal screen was a point taking me down…

    Id like to know if is possible to adapt this sketch to be used with a normal Arduino Uno… and a Midi interface? I tryed to upload the Hex file to the UNO, but doesnt work… any ideas?
    Thanks a lot for posting this… and looking forward to hearing from back soon! 🙂

    Cheers!
    Julian

    • The original MidiPAL firmware ported to MidiBud does not use second line. 5 Buttons are used to quickly access first 5 parameters of an app, to run/stop sequencer app, and to select programs 1-4 in user program app. I mostly use MidiBud as a platform for some other Midi apps i’m working on: you can do a lot with Midi In/Out, 16×2 LCD, clickable encoder, 4 switches and external EEPROM chip.

  2. Hello!

    When flashing the atmega with the firmware, do I need to set up fuses and stuff?

    Is there any instructions you could provide on burning the PIC?

    Cheers!

    • Yeah, you’ll need to set fuses correctly, here are the settings:

      LFUSE = ff
      HFUSE = d4
      EFUSE = fd
      LOCK = 2f

      For flashing instruction refer to your programmer manual. If you are using Atmel’s AVR ICE mkII you can use AVR Studio GUI or the following command line:

      set path=%path%;C:\Program Files (x86)\Atmel\AVR Tools\STK500
      stk500 -cUSB -dATmega328p -I125Khz -e -fD4FF -FD4FF -EFD -GFD
      stk500 -cUSB -dATmega328p -I4Mhz -e -ifbuild\midibud\midibud.hex -pf -vf

  3. I saw you added an eeprom to the original midipal design. Does it allow you to put more apps on the midibud or does it have another function.

  4. Hey,
    I have a question MIDIBud can act as combining several channels to a single stream of MIDI, like MIDI merger.
    How to connect a MIDI 6 pcs synthesizer, all work on channel 1, I want to combine everything into one stream also MIDI channel 1. How to connect?
    Is this possible? and further use for example apreggiator?
    Cheers

    • MidiBud has only one MIDI IN port, so it cannot act as MIDI merger. The upcoming MidiMate project has two inputs and two outputs and this can merge two MIDI streams into one. MidiMate will be available in a couple of months.

      • This sounds awesome– I’m just discovering this about a year later, and Googling for MidiMate I get a bunch of hits that seem unrelated– did this happen? Did it get renamed?

      • It did happen, I’ve fabbed and built prototype boards and wrote firmware core, everything works as expected. However, the project is currently on hold due to lack of spare time.

  5. Peter, is the midibud capable of being powered by MIDI? I accidentally plugged a MidiALF out into the output of the MidiBud, and it’s on and running. The screen is pretty faint, but it’s on – no power supply connected. Obviously it doesn’t do much good with the midi input plugged into the output jack, but I wonder if it would be possible to wire it somehow so it’s powered from MIDI.

    • It looks like it should, however i’m still waiting for my order from buydisplay.com to arrive — it’s 5 weeks already, they suggest to wait. I don’t think i’ll order from them again.

  6. Awsome timming! my parcel was sent on April the 5th, recieved in Europe the 10th. Thats 5 days! Now a bit of waiting to get the rest of components and finally build my MIDIBud! 😉
    I will make a nice case with my CNC and Will get back with pictures!!

  7. Hi there!

    I was wondering about specific features of MidiBud. Do they match exactly MIDIPal programs and sequencing?

    Is it possible to control 16 MIDI Channels separately?

    Is it possible to get al components including a case?

    I live in Spain

    Alberto

    • MidiBUD can use the same firmware as MIDIpal.

      Not sure what you mean by controlling 16 channels, please check MIDIpal manual for details.

      Sorry, I can only provide PCB and preprogrammed MCU.

  8. Just finished building my MidiBUD. I used the same Newhaven white LCD that I used on a recent Shruthi-1.
    When I power up the MidiBUD, the display backlight turns on, but I see no characters. The contrast trimmer doesn’t seem to take any effect on anything at all, and it doesn’t seem to hit a “stop” in either direction when turned repeatedly.
    When I send MIDI in, both LEDS blink as I would expect.
    The Atmega seemed to program OK (I’ve done a few of these before for other projects).
    I see +5v on the 2 pin header near the jack.
    I reflowed all the joints. Reseated the ATmega.
    Checked components/orientations.
    Its a 0.3 board, and I do have the jumper wire soldered in place/

    Do I need the 68Ohm resistor, or just a link, or nothing? Is that anything to do with my blank display?
    Any suggestions?

    Thanks!

      • No, the contrast doesn’t affect (the very feint) boxes at all. Not even a little. Its hard to really say if there is any text or not because the contrast isn’t really there. Do you think the trimmer could be the problem? If so, what’s the best way to test that in circuit?

      • OK, 38 turns (!) on the trimmer, now I have a row of blocks on the upper line only. That would seem that the ATmega isn’t booting up/running, yes?

      • 38 turns? Hmm… looks like a broken trimmer to me, some of the cheaper ones actually break when you turn the too many times. These trimmers are 20 turn in on direction. You can test trimmer by checking the voltage change at its wiper (middle terminal).

      • OK, I think my trimmer was a bit dodgy. Turned a bit, if flickered, now I’m in business. chn [11]. Thanks!

  9. Hi kvitekp, I have had a pcb for a while and getting around to building, is there a file in existence that I can use to CNC or 3D print a panel? IF there is no CAD file for that, some kind of file with the measurements and sizes of the drill patterns and hole sizes? I want to mount this in an enclosure and make it really slick looking

    • MidiBud was designed as a prototyping platform and never meant to be encased, so LCD, encoder and switches are placed on the same side of the PCB as MIDI connectors, which makes it difficult to put it in the case. However, some people solder MIDI connectors on the other side and cut/jumper traces to mirror them. I believe the same needs to be done with DC connector. This makes it much easier to put into the case.

      As for CAD case files — i’m not aware of any, however of you email me, i’ll respond with a 1:1 scale PDF file with all the important sizes, holes and component positions that could be loaded into Corel or Illustrator.

  10. I’ve used a 1:1 PDF (which Eagle can also make) to design a case before, unfortunately needed some adjustments, so print and cut a cardstock copy before sending to whatever laser cutting service you use, just to be sure the case works.

  11. hi there great project. 1 question. when i create a sequence will midibud remember it if i use another app then go back into seq and press play

  12. So, I desperately wanted a MidiPal, but as they’re discontinued it seems like this is my best option. That said, I’ve never done any kind of soldering/DIY gear building. Is this kit do-able for a beginner?

  13. Hey,
    I too have been searching for a midi buddy and have found they are discontinued 😦
    But I stumbled onto midi bud so there is hope that I will play chord memory on my awesome synths 🙂
    Does the Pre-programmed ATMega328p fire right up once the build is complete?

  14. hallo i need some kind of midi clock manipulation kit, clock delay, clock shift und swing while passing the notes. can this be done? or programmed?

  15. I’m looking for something just like this but that you can get built and in an enclosure. The MidiPal doesn’t have enough screen space or the buttons I need to do my app, this looks about perfect but don’t want to have to do my own builds if the app I have in mind is successful. Any thoughts?

    • I sometimes build MidiBUDs on order when people ask, but those are one off builds. If you want production quantities, i cannot help, sorry…. MidiBUD was designed as DIY product. If you want manufacturing, you’ll have to do it yourself.

  16. Hi there again. Amazing project i must say! Just like so many before me, i guess, id like to box it up. Any idea who to contact/proj files for having an enclosure made for this?

  17. I’m seeing some very weird results with “monitor” mode on my MIDIBud. It sees MIDI messages, but they are rarely correct. For example, sending from CH 09, the display reports the channel as 5 then 9 then 13! It often gets the message wrong too (wrong note etc). Usually the display reverts to reset (not !reset! like in the menu). Anyone seen this before?

    • I usually see similar behavior when I insert 6N138 or 6N139 instead of 6N137 which this design requires. These other two optocopulers are so slow that UART input trigger misreads the input data.

  18. Hello, i have my midi bud 🙂 and now i’m looking for a box, plexiglass would be perfect.
    Anyone with good suggestion?
    Thanks

  19. Hi, I have tried to update my MidiBud to Midigal/MidiArp firmware and something went wrong. I Entered firmware mode, LEDs flashed alternately then I sent the syx from C6 .. The Midi IN LED flashed for awhile, then both LEDs flashed alternately again. Then I powered on and nothing happened except the LCD turns on. I increased the contrast but just shows the top row with solid blocks, no indication the firmware is there. Did I screw something up?

      • Are the LEDs blinking when you are sending MidiBUD firmware? If not, you are trying to upload firmware sysex that is not compatible with the bootloader in your MidiBUD.

      • The Midi IN LED blinks fast while the file is uploading, then it does the back-and-forth slower blink between In and OUT LEDS (like when entering firmware mode). I have tried to re-load the MidiBUD firmware but now it won’t load either.. Maybe there is some issue with my Midi I/F, I’m using a different one than last time I did this. But then it wouldn’t blink during upload right?

  20. Actually to be clear:
    * If I send ‘midiarp_pal.syx’ it blinks during the loading process then does the back-and-forth blink at the end.
    * If I send ‘midibud_pal.syx’ it blinks during the loading process then does NOT do the back-and-forth blink at the end.
    * If I send ‘midibud.syx’ or ‘midiarp.syx’ there are no blinks at all.

  21. I use the bud for quite a few years allready and it never let me down. But everytime I look @ the display is looks silly that only 8 characters are used. Do you think it is possible to edit the resources text string file in the source? Adding the function of the 5 buttons on the second row is my target. What software do I need, AVR studio? I am an exclusively Arduino guy but not affraid to dive into AVR. Would there be memory left in the fcontroller for the extra code?

    • That should be possible, however, since the program memory is almost full, you’ll probably need to get rid of one of the less useful apps. You will need WinAVR-20100110 or newer and AVR ISP programmer.

  22. geed day!
    i can’t build
    – linux
    – AVR ToolChain 3.6.1, 3.5.4, 3.4.2, default avr-gcc-4.9.2

    error
    –>
    midipal/resources.cc:278:39: error: variable ‘midipal::string_table’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
    PROGMEM const prog_char* string_table[] = {
    ^
    midipal/resources.cc:702:49: error: variable ‘midipal::lookup_table_table’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
    PROGMEM const prog_uint16_t* lookup_table_table[] = {
    ^
    make: *** [build/midipal/resources.o] Error 1
    –>

  23. //
    // resources.cc.patch
    //
    <—
    — midipal/resources.cc 2019-10-23 09:00:48.946008757 +0700
    +++ midipal/resources.cc 2019-10-23 05:11:37.000000000 +0700
    @@ -274,7 +274,8 @@ static const prog_char str_res_fre[] PRO
    static const prog_char str_res_chd[] PROGMEM = "chd";
    static const prog_char str_res_prg[] PROGMEM = "prg";

    -const prog_char* const string_table[] PROGMEM = {
    +
    +PROGMEM const prog_char* string_table[] = {
    str_res_syncltch,
    str_res_polyseq,
    str_res_arpeggio,
    @@ -698,7 +699,7 @@ const prog_uint16_t lut_res_increments[]
    };

    -PROGMEM const prog_uint16_t* const lookup_table_table[] = {
    +PROGMEM const prog_uint16_t* lookup_table_table[] = {
    lut_res_arpeggiator_patterns,
    lut_res_drum_patterns,
    lut_res_groove_swing,
    @@ -753,7 +754,7 @@ const prog_uint8_t chr_res_sequencer_ico
    };

    -const prog_uint8_t* const character_table[] = {
    +const prog_uint8_t* character_table[] = {
    chr_res_digits_10,
    chr_res_sequencer_icons,
    };
    @@ -1037,7 +1038,7 @@ const prog_uint8_t wav_res_lfo_waveforms
    };

    -const prog_uint8_t* const waveform_table[] = {
    +const prog_uint8_t* waveform_table[] = {
    wav_res_lfo_waveforms,
    };
    <—

    //
    // resources.h.patch
    //
    <—
    — midipal/resources.h 2019-10-23 09:00:24.557189740 +0700
    +++ midipal/resources.h 2019-10-23 05:11:37.000000000 +0700
    @@ -36,13 +36,13 @@ namespace midipal {

    typedef uint16_t ResourceId;

    -extern const prog_char* const string_table[];
    +extern const prog_char* string_table[];

    -extern const prog_uint16_t* const lookup_table_table[];
    +extern const prog_uint16_t* lookup_table_table[];

    -extern const prog_uint8_t* const character_table[];
    +extern const prog_uint8_t* character_table[];

    -extern const prog_uint8_t* const waveform_table[];
    +extern const prog_uint8_t* waveform_table[];

    extern const prog_uint16_t lut_res_arpeggiator_patterns[] PROGMEM;
    extern const prog_uint16_t lut_res_drum_patterns[] PROGMEM;
    <—

    no thanks… :o)

  24. > MIDIpal is Mutable Instruments product,
    please be careful always!
    i’m built your project “MidiSizer/MidiBud”, but no MIDIpal !!!

  25. ups…
    i’m public revers-mode patchs… sorrow
    these are the correct patches (specifically only checked that)

    ///////////////////////////////////////////////////////////////////////////////
    // resources.cc.patch
    ///////////////////////////////////////////////////////////////////////////////

    — midipal/resources.cc 2019-10-23 09:00:48.946008757 +0700
    +++ midipal/resources.cc 2019-10-23 05:11:37.000000000 +0700
    @@ -274,7 +274,8 @@ static const prog_char str_res_fre[] PRO
    static const prog_char str_res_chd[] PROGMEM = “chd”;
    static const prog_char str_res_prg[] PROGMEM = “prg”;

    -PROGMEM const prog_char* string_table[] = {
    +
    +const prog_char* const string_table[] PROGMEM = {
    str_res_syncltch,
    str_res_polyseq,
    str_res_arpeggio,
    @@ -698,7 +699,7 @@ const prog_uint16_t lut_res_increments[]
    };

    -PROGMEM const prog_uint16_t* lookup_table_table[] = {
    +PROGMEM const prog_uint16_t* const lookup_table_table[] = {
    lut_res_arpeggiator_patterns,
    lut_res_drum_patterns,
    lut_res_groove_swing,
    @@ -753,7 +754,7 @@ const prog_uint8_t chr_res_sequencer_ico
    };

    -const prog_uint8_t* character_table[] = {
    +const prog_uint8_t* const character_table[] = {
    chr_res_digits_10,
    chr_res_sequencer_icons,
    };
    @@ -1037,7 +1038,7 @@ const prog_uint8_t wav_res_lfo_waveforms
    };

    -const prog_uint8_t* waveform_table[] = {
    +const prog_uint8_t* const waveform_table[] = {
    wav_res_lfo_waveforms,
    };

    ///////////////////////////////////////////////////////////////////////////////
    // resources.h.patch
    ///////////////////////////////////////////////////////////////////////////////

    — midipal/resources.h 2019-10-23 09:00:24.557189740 +0700
    +++ midipal/resources.h 2019-10-23 05:11:37.000000000 +0700
    @@ -36,13 +36,13 @@ namespace midipal {

    typedef uint16_t ResourceId;

    -extern const prog_char* string_table[];
    +extern const prog_char* const string_table[];

    -extern const prog_uint16_t* lookup_table_table[];
    +extern const prog_uint16_t* const lookup_table_table[];

    -extern const prog_uint8_t* character_table[];
    +extern const prog_uint8_t* const character_table[];

    -extern const prog_uint8_t* waveform_table[];
    +extern const prog_uint8_t* const waveform_table[];

    extern const prog_uint16_t lut_res_arpeggiator_patterns[] PROGMEM;
    extern const prog_uint16_t lut_res_drum_patterns[] PROGMEM;

    ///////////////////////////////////////////////////////////////////////////////

      • Thank you! Sorry I was not very clear. What is working is the LEDs when changing the firmware. But overall the device is not working properly. It is not sending or processing MIDI that I can see (I tested it using a MIDI monitor)

      • Turns out it was s problem with the ATmega. I bought an ISP programmer and reflashed the firmware and everything works again!

  26. I was wondering when running the MidiDisp firmware will velocity be sent to all output channels or is it filtered out?

Leave a comment