Simple (trivial) parallel port programmer

1 Overview

Has same purpose like serial port programmer. You have to use it to get PIC bootloader before you use USB HID programmer or you may use it to put any other FW into your PIC. Programmer uses In-Circuit Serial Programming (ICSP) interface described in PIC18F2455 / 2550 / 4455 / 4550 Data sheet.

Here are briefly summarized positives and negatives of Simple (trivial) parallel port programmer:

+/- What Why
+ free HW & bootloader & programming SW are available for free
+ easy 1) plug to LPT port
2) power on
3) run FW update from PC
+ cheap just few components needed
+ no Windows
driver needed
uses standard Windows parallel port driver or drivers shipped with PC / NB chipset
- external
power supply
parallel port programmer needs external power supply +5V to operate
- slow slower than USB programmer, but faster than COM port programmer
- no COM ports
on new PCs
actual PCs and NBs does not have LPT ports, due to technology obsolescence; but you may try to use for your new PC/NB without LPT port: - for PCs: (serial and) parallel port PCI or PCI express cards
- for NBs: PCMCIA card or ExpressCard to parallel port
I don’t know if USB to LPT converter will work.

2 HW

I was inspired by FD-ART2003 parallel port programmer. But it does not worked, after few measurements I found out, that LPT bidirectional pins 17:SEL IN\ and 14:AUTOFD\ did not work as outputs. Changes in BIOS between SPP / EPP / ECP modes do not helped. So I have used data pins instead:

PIC18F2550 parallel port programmer scheme
Figure 1: PIC18F2550 parallel port programmer scheme

Scheme contains just 1 resistor. This parallel port programmer needs external power +5V.
But it is easy to overcome this problem by getting needed power from USB port (as shown on bottom right corner of scheme}. See USB pinout on USB programmer web page. There are few additional components used (two capacitors C1 and C2), but nothing critical will happen if you omit them both.
If there is not +5V source from USB available, you can use DC power adapters. Typical adjustable DC adapter nor have +5V output, nor has stabilized output. That means you should use some more components to get stabilized DC +5V from power adapter:

DC power stabilizer +5V
Figure 2: DC power stabilizer +5V

To simplify scheme you can omit R1 and LED1 which role is to signalize that +5V is available on output. C3 is not critical, too. But I do not recommend removing of capacitors C1 and C2.

And this is how it looks on my experiment solderless breadboard:

PIC18F2550 parallel port programmer on experiment solderless breadboard
Figure 3: PIC18F2550 parallel port programmer on experiment solderless breadboard

I have used LPT cable 25 pin D sub to 36 pin centronics connector. I have decided to not to cut centronics connector from cable, because this is my only cable of this type (and today it does not make sense to buy next one). But I have soldered wires on all signals of centronics conector, so the cable can be still used. Every wire has its own signal name label for fast & easy use.

Here is LPT cable pin out you may find useful:

Pin No
Pin No
SPP signal
(n prefix means
1 1 nStrobe in/out
2 2 Data 0 out
3 3 Data 1 out
4 4 Data 2 out
5 5 Data 3 out
6 6 Data 4 out
7 7 Data 5 out
8 8 Data 6 out
9 9 Data 7 out
10 10 nAck in
11 11 Busy in
12 12 Paper-Out /
13 13 Select in
14 14 nAuto-Linefeed in/out
15 32 nError / nFault in
16 31 nInitialize in/out
17 36 nSelect-Printer /
18-25 19-30 Ground GND
DB9 male

Figure 4: LPT port (parallel port) pinout

2 SW

I have decided again for PICpgm. It is really mature and universal programming SW (I have also used in parallel PIC programmer). And it is for free, too.
No additional drivers are needed to run programming SW.

All needed you could find packed in 1 archive at the bottom of this article.

Let’s look how to use it:

  1. Connect your parallel PIC programmer to PC / NB.
  2. Power up parallel PIC programmer with +5V (USB power source or adapter with stabilized DC).
  3. Start PICpgm (I have used v.
  4. First you have to check configuration - from main menu select item Hardware - subitem Hardware Selection/Configuration:

    PICpgm - Hardware - Hardware Selection/Configuration
    Figure 5: PICpgm - Hardware - Hardware Selection/Configuration

  5. Check your settings are same like here:

    PICpgm - Programmer Selection/Configuration
    Figure 6: PICpgm - Programmer Selection/Configuration

    The only difference should be in Port configuration - mine parallel port is named LPT1. Here chose parallel port name your parallel port has. You are limited to choose LPT1 to LPT4. If your parallel port number has higher number you have to change it in your windows device manager in your parallel port device driver.

  6. If your configuration is right, you will see that PICpgm detects your PIC chip:

    PICpgm - PIC detected
    Figure 7: PICpgm - PIC detected

    Be patient, it takes some time till PicPgm reads information after you click OK in previous step.

  7. Browse your HEX file you would like to get into PIC
    I have used HEX file of USB bootloader for PIC18F2550, see archive file for download in USB programmer.

  8. Press Program PIC button

    PICpgm - Program PIC
    Figure 8: PICpgm - Program PIC

    Now rest of the work does PICpgm automatically.

  9. PICpgm in first step erases PIC:

    PICpgm - PIC erasing start
    Figure 9: PICpgm - PIC erasing start

    PICpgm - PIC erasing finished
    Figure 10: PICpgm - PIC erasing finished

  10. PICpgm in second step programs content of FLASH:

    PICpgm - PIC FLASH programming progress
    Figure 11: PICpgm - PIC FLASH programming progress

  11. PICpgm in third step verifies programmed FLASH memory:

    PICpgm - PIC FLASH content verifying progress
    Figure 12: PICpgm - PIC FLASH content verifying progress

  12. PICpgm in fourth step programs data memory:

    PICpgm - PIC EEPROM data memory programming progress
    Figure 13: PICpgm - PIC EEPROM data memory programming progress

  13. PICpgm in fourth step programs data memory:

    PICpgm - PIC EEPROM data memory verifying progress
    Figure 14: PICpgm - PIC EEPROM data memory verifying progress

  14. PICpgm in sixth programs and verifies configuration memory:

    PICpgm - PIC configuration memory verifying progress
    Figure 15: PICpgm - PIC configuration memory verifying progress

    That is just few bytes to program, so this step goes fast.

  15. PICpgm in last step evaluates verification:

    PICpgm - PIC verification errors
    Figure 16: PICpgm - PIC verification errors

    Even verification fails, programming was successful, as is also written on PICpgm web pages: If you do not need RB5 as I/O pin and RB5 is held on GND level you can ignore this verify error. It will not cause any problems.

  16. For sure check the PICpgm Log, which should have only this one verification error:

    PICpgm - Verify Error: Cfg Mem 0x000006: PIC=0x0085 Buf=0x0081
    Figure 17: PICpgm - Verify Error: Cfg Mem 0x000006: PIC=0x0085 Buf=0x0081

    If you see there more errors like this,

    PICpgm - more Verify Error
    Figure 18: PICpgm - more Verify Errors

    there is still chance to success. You have to try to find optimal delay value in configuration dialog:

    PICpgm - my configuration leading to more Verification Errors
    Figure 19: PICpgm - my configuration leading to more Verification Errors

    In my case there was problem with Normal Delay factor and Slow Delay factor, but I found optimal value in the middle of range.

  17. But if you would like to prevent error message in previous step, you can do it by changing configuration of LVP bit (Low Voltage Programming bit):

    PICpgm - Verify Error: Cfg Mem 0x000006: PIC=0x0085 Buf=0x0081
    Figure 20: PICpgm - PIC LVP change to Enabled

    You have to go to Config Bits tab of PICpgm and change the configuration of LVP bit manually from Disabled to Enabled, when there is Disabled value.
    You have to do this every time you load HEX file into PICpgm.
    After this change you will see this "Success dialog" except that one on Figure 16:

    PICpgm - PIC programming finished successfully
    Figure 21: PICpgm - PIC programming finished successfully

    This "Success dialog" will automatically disappear after few seconds.

    Just for comparison with Log containing errors on Figure 17 here is Log without any error:

    PICpgm - Log without error
    Figure 22: PICpgm - Log without error

    Do not forget that changing LVP to Enabled will block RB5/VPP pin of PIC18F2550 as clearly described on PICpgm pages:
    The bit for which the verification fails here is the "LVP" configuration bit:
    LVP: Low-Voltage Programming Enable bit:
    1 = Low-Voltage Programming enabled, RB5 is the PGM pin
    0 = Low-Voltage Programming disabled, RB5 is an I/O pin


Archive LPT programmer contains:

You can start with programming USB HID bootloader into PIC - see section USB bootloader.

6 Final remarks

  1. This article just shows what worked for me, it does not mean there is not another way to achieve same result.
  2. You can find many other programming SWs. I like PICpgm.
  3. I was also successful with ElCheapo configuration (using same configuration like for TLVP seems it does same work).
  4. If you get verification errors, nothing is lost, try to check configuration changes described in step 16.
  5. Programmer has to work with PIC18F2455 which has 24kB FLASH comparing to PIC18F2550’s 32kB FLASH. So this is Simple serial port programmer (JDM programmer) for PIC18F2550 and PIC18F2455.
  6. Don’t forget, everything you do is at your own risk. You have to know what you are doing. I am not responsible for any damages caused by using any information from these web pages.
  7. If you want to work with PICs professionally, see some commercial products with debugging capability.
  8. If you found these information useful, please consider to:

    This will allow me to bring more information and projects for you.