English Version Spanish Version

MIDIbox Hardware Platform, JDM Programmer Module


The JDM programmer is a low-cost solution for getting a program into the internal flash memory of the PIC. Beside of the original plans by Jens Dyekjær Madsen, which can be found on his website, there are also a lot of modified schematics available in the web. R1 and the voltage of D5 are additional modifications which are necessary for all newer PICs which come with the low-voltage-programming capability (which is in fact not used by the JDM programmer and has to be disabled by the 10k pulldown resistor at pin RB3) and a slightly increased value for the Z-diode in order to meet the programming specs of PIC16F87x and PIC18F452 (Note: if you cannot find a 8,7V zener, just take the 8,2V, it will work in most cases).

IC-Prog by Bonny Gijzen seems to be the most flexible burning software, because it supports not only the JDM, but also a lot of other programmers. It can be downloaded here: http://www.ic-prog.com. Configure IC-Prog like descriped in the help file and load the .hex file of the MIDIbox. This file includes the memory dump of the firmware and all necessary settings:

Click here for the full size - Note that the data and checksum depends on the firmware (.hex file) you loaded

Before you start to program the chip, please check your programmer circuit in the Hardware Check menu.
Important: don't measure the voltages with a scope or similar instrument, which is grounded to earth like your PC, because this will falsify the measuring results (the JDM uses the ground connection for Vdd). Just use a battery driven multimeter instead. Follow these instructions:

  • Go into the Settings->Hardware menu, switch to the "JDM Programmer", select the Port (COM1, COM2, ...?), Select Interface Direct I/O (good for Windows 9x) or API (Windows ME/NT/2000/XP). Start with I/O Delay 0, Don't invert any signal:
  • Now select the correct device: Settings->Device->Microchip PIC->PIC18F452 (or PIC16F874 or PIC16F877 for PIC16F MIDIboxes)
  • Start Settings->Options, go into the "Programming" submenu
  • Enable "Verfiy after programming" and "Verify during programming". The last option ensure that you will be notified about an programming error immediately. The first option is especially required for PIC16F87xA derivatives, since IC-Prog doesn't verify these chips during programming.
  • Go into the "Misc" submenu, enable "Vcc control for JDM" and select the "Realtime" Process Priority
  • Go into the Settings->Hardware Check menu
  • Prepare your multimeter and check the voltages on your programmer.
    Note: when a signal is disabled, the voltage falls to 0V very very slowly, since the caps are not decharged by a load. So, don't keep an eye on the values of disabled signals, just only check enabled signals.
    Note2: the voltages will change to the correct and specified values when a PIC is in the socket. The purpose of the hardware check is not, to see the correct voltages, but to ensure that the signals can be controlled (switched on/off) by your PC. If you want to ensure that the voltage is not too high under load in order to verify if the circuit is wired correctly, temporary connect a 1k resistor between Vss and the "pin under test".
  • Ensure that no PIC is in the programming socket!!!
  • Click On "Enable Data Out": the Data In box should be automatically checked due to the hardware feedback (Data Out->Data In). Switch off "Data out" again. Don't worry if Data In toggles during the next tests, this is the normal behaviour.
  • Click on "Enable MCLR", measure voltage between Vss (Pin 12/31) and MCLR# (Pin 1) : ca. 14 V
  • Disable all signals
  • Click on "Enable Vcc", measure voltage between Vss (Pin 12/31) and Vdd (Pin 11/32): ca. 5 V
  • If this test fails, ensure that the "Vcc control for JDM" option is enabled in the "Misc" submenu (Settings->Options)
  • Disable all signals
  • Click on "Enable clock", measure voltage between Vss (Pin 12/31) and RB6 (Pin 39): ca. 5 V +/- 1 V
  • Disable all signals
  • Click on "Enable Data Out", measure voltage between Vss (Pin 12/31) and RB7 (Pin 40): ca 5 V +/- 0.5 V
  • Now plug the PIC into the programming socket.
  • Start Command->Read All
  • During the Reading:
    Measure voltage between Vss (Pin 12/31) and MCLR# (Pin 1) : ca. 13.7 V
    Measure voltage between Vss (Pin 12/31) and Vdd (Pin 11/32): ca. 5.1 V
    It makes no sense to measure the voltages on the other pins, since they are toggling too fast.
    Note: the JDM programmer will not work, wenn you probe these pins with a scope (GND->Earth problem)
  • If you don't measure 13.7V between Vss and MCLR when the PIC is plugged in, you can increase/decrease the voltage with the I/O Delay in the Hardware menu. Lower delays will increase the voltage, higher delays will decrease the voltage! I noticed, that 13.7V cannot be reached when the JDM is accessed via the Windows API functions
  • Start File->Open File: load the firmware (.hex file) into IC-Prog
  • Start Command->Program All
  • Now it takes about 3 minutes until the PIC is programmed. If writing doesn't work, IC-Prog will notify this as "Verify failed" when the "Verfiy after programming" and "Verify during programming" is checked in the Settings->Options->Programming submenu
    Note:It seems that with some PCs the programming procedure only passes, when pin 5 (GND) of the SubD-Plug is connected with the metal chassis (shield ground) of the connector.

After programming is done, your PIC is able to groove :)


PCB data, can be viewed, modified and converted with Eagle Light. The .pdf based schematic has been created with xcircuit. There are no special eagle schematics available, since components have been netlisted in the .brd file directly!
Module Schematic Layout Data Quick-view
MBHP_JDM_V2 mbhp_jdm_v2_sm.gif mbhp_jdm_v2.brd mbhp_jdm_v2.gif
Additional informations
File Size Description
mbhp_jdm_orderlist.txt 1k Reichelt orderlist


See the original page of Jens Dyekjær Madsen

Available Ports

Following interfaces are provided by the JDM module:

Name No. of pins Description
J1 9 This is the interface to the COM-port of your PC. A 9-pole sub-d socket (female) has to be used.
J2 10 This is the in-circuit programming interface to J3 of the MBHP core module.

Used Components

Here a list of the used components. A complete orderlist for Reichelt and Mouser can be found here, Mouser partlist for the US: see SmashTV's Website, if you have a orderlist for a distributor on your country, feel free publish it on this page!

Soldering Guide

Start with soldering the 2 bridges which save you from creating a 2-layer board. You can use the cutted legs of caps and resistors, before you throw them away after you finished all the modules! :-)
Stuff the components: IC-socket, Resistors, Caps, Diodes, Transistors, Connectors...
This pictures shows the 2 additional bridges to the in-circuit-programming-connector, realized with isolated cables.
Connect the programmer to your PC and measure the voltages like described above.
Thereafter plug the PIC into the socket and try to program the chip.
You can also program the PIC via an In-Circuit-Programming-Adapter.
Thats a selfmade 1:1 2-row PCB connector, like known from PC components.
Another view to the selfmade connector. See the LCD page, how to make such a connector.
Same circuit on a vectorboard.


  • Compare your circuit with the schematic and the PCB layout again and again - check especially the polarity of the diodes, the caps, the transistors. Ensure that the solderings are fine (no slack joints)
  • IC-Prog sometimes "forgets" an option under some unknown circumstances (e.g. the I/O delay and the COM port number). So, if the burning procedure fails, ensure that your setup hasn't been changed in the meantime.
  • Try different I/O delay values - see also this posting.
  • Follow this link if you are a Windows XP user (thanks Rowan!)
  • Use the verify function of IC-Prog to ensure that the firmware has been burned successfully if your PIC doesn't run.
  • Don't burn a PIC16F877 firmware into the PIC18F452 - the PIC18F isn't code compatible!
    All PIC16F firmwares (used by the old projects) are published as .hex file, for the PIC18F you only need to burn the Bootloader, the operating system and the application will be programmed via MIDI.
  • Here some success stories (strange problems which have been solved) Story #1 Story #2 Story #3 Story #4
  • If the MCLR# voltage isn't high enough (problem has been observed on laptops, but also on newer PCs with a weak COM port), you can supply this voltage from external like shown in the schematic below. Use either two 9V batteries or a PSU which delivers at least 15V. A regulator isn't required, the zener diodes limit the voltage. Don't forget the 220 Ohm resistor - it limits the current and protects the JDM circuit.
    alternative external power supply for JDM
  • Plug the PIC directly into the JDM module socket when you burn it the first time, because an erased PIC requires the pull-down resistor at pin RB3 (PIC18F452: at pin RB5!) which disables the low-voltage programming mode:
    disable the LVP mode
  • WinPic800 is an alternative programming software - it's worth a try if IC-Prog fails. It also supports newer PICs like the PIC18F4620.
    MTE put some informations into the Wiki.

Last update: 2018-03-05

Copyright © 1998-2018, Thorsten Klose. All rights reserved.