The hardware is built around a microchip PIC18F2550, this microcontroller has on board USB capabilities. The schematic and PCB have been designed in Kicad, an open source EDA solution
The PCB files are available in Gerber format and the schematic in pdf in the download section so that you can open them with your favourite tool.

click on the schematic below to have a larger view (PDF).

Usbpicprog Schematic - circuit of the programmer

The interface to the target PIC processor uses TTL levels (0 and 5 volts) which limits the hardware to the PIC10, PIC12, PIC16, PIC17, PIC18 and dsPIC30 series of processors. The hardware (from version 0.3) is capable of creating levels for PIC24 / PIC33 / PIC18FXXJXX devices as well.



A PIC18f2550 has been used to convert the USB commands to logical levels on the programming header. The firmware is described on the Embedded page. The controller connects to the PC by USB.

Voltage pump

On top of the schematic you see the voltage pump which converts the 5V of VDD to 12V on VPP. It charges and discharges the capacitors C8 – C10 by toggling the signals on Pump1 and Pump2

Programming header P1

The programming header is used to program a target board using ICSP (in circuit serial programming). The pinout of this connector (and also the second connector which is used to write the bootloader in usbpicprog’s own processor) is shown in the following table:

Pin# Name Description Level
1 GND Target PIC ground 0V
2 PGC Target PIC Program Clock 0V, 3.3V, 5V
3 PGD Target PIC Program Data 0V, 3.3V, 5V, input
4 VDD Target PIC Supply Voltage high impedance, 5V
5 VPP Target PIC Program voltage 0V, 5V, 12V, high impedance

Self programming header P2

The self programming header is for programming the bootloader into Usbpicprog. The pinout is the same as P1.
The bootloader can be loaded with any PIC in-circuit programmer. If you don’t have one and can’t borrow one, it’s easy to make one inside an RS232 connector casing.
Note that an external 12V supply is needed. (If your 12V supply is stabilized well, you don’t need the zener D1)
In Piklab you can use this programmer as Direct programmer ==> JDM programmer with MCLR inverted.
You can find the schematic of this JDM programmer here

If you are running Windows, you can use Winpic800 in order to use the JDM programmer. For the macosx users: sorry, I don’t have a tip for you here…

Once the bootloader (it uses Picdem USB) is loaded for the first time, you can update the firmware through the usbpicprog application, so you will only need to borrow a programmer once!

Status leds

Since version 0.3 of the hardware, the leds have gotten their own color, and their own functionality:

Led1, Red Write
Led2, Yellow Read
Led3, Green Connected, blinking while in standby

In Bootloader mode, with the select jumper removed, Led1 (Red) and Led2 (Yellow) Should be on.


Two designs (v0.3) exist at the moment, an SMD design which is shown on the pictures below and a through hole design for those people who don’t know how to solder SMD components.

This is a picture of the Final PCB (For the sharp people: yes, it has a PIC18F2455 in stead of 2550 to test it for compatibility)

The usbpicprog hardware in SMD, top view

The usbpicprog hardware in SMD, bottom view

The through hole version of the PCB has been assembled and tested too. Thanks to Francesco Montorsi

The usbpicprog hardware (through hole version)

A fancy looking compact through hole version was created by Marcelo Maggi. The description can be found here

Compact Through hole version

Compact through hole version by Marcelo Maggi