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 needed | 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:
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:
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:
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 D-sub 25 | Pin No Centro nics | SPP signal (n prefix means inverted) | Direction in/out | connector pinout |
|---|---|---|---|---|
| 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 / Paper-End | in | |
| 13 | 13 | Select | in | |
| 14 | 14 | nAuto-Linefeed | in/out | |
| 15 | 32 | nError / nFault | in | |
| 16 | 31 | nInitialize | in/out | |
| 17 | 36 | nSelect-Printer / nSelect-In | in/out | |
| 18-25 | 19-30 | Ground | GND |
Figure 4: LPT port (parallel port) pinout
3. 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:
- Connect your parallel PIC programmer to PC / NB.
- Power up parallel PIC programmer with +5V (USB power source or adapter with stabilized DC).
- Start PICpgm (I have used v. 1.7.8.0).
- First you have to check configuration - from main menu select item Hardware - subitem Hardware Selection/Configuration:
Figure 5: PICpgm - Hardware - Hardware Selection/Configuration
- Check your settings are same like here:
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.
- If your configuration is right, you will see that PICpgm detects your PIC chip:
Figure 7: PICpgm - PIC detected
Be patient, it takes some time till PicPgm reads information after you click OK in previous step.
- 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. - Press Program PIC button
Figure 8: PICpgm - Program PIC
Now rest of the work does PICpgm automatically.
- PICpgm in first step erases PIC:
Figure 9: PICpgm - PIC erasing start
Figure 10: PICpgm - PIC erasing finished
- PICpgm in second step programs content of FLASH:
Figure 11: PICpgm - PIC FLASH programming progress
- PICpgm in third step verifies programmed FLASH memory:
Figure 12: PICpgm - PIC FLASH content verifying progress
- PICpgm in fourth step programs data memory:
Figure 13: PICpgm - PIC EEPROM data memory programming progress
- PICpgm in fifth step programs data memory:
Figure 14: PICpgm - PIC EEPROM data memory verifying progress
- PICpgm in sixth programs and verifies configuration memory:
Figure 15: PICpgm - PIC configuration memory verifying progress
That is just few bytes to program, so this step goes fast. - PICpgm in last step evaluates verification:
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.
- For sure check the PICpgm Log, which should have only this one verification error:
Figure 17: PICpgm - Verify Error: Cfg Mem 0x000006: PIC=0x0085 Buf=0x0081
If you see there more errors like this,
Figure 18: PICpgm - more Verify Errors
there is still chance to success. You have to try to find optimal delay value in configuration dialog:
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.
- 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):
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:
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:
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
4. Downloads
Archive LPT programmer package.zip contains:
- PICPgm version 1.7.8.0 portable,
- LPT programmer schematics in PDF.
You can start with programming USB HID bootloader into PIC - see section USB bootloader.
5. Final remarks
- This article just shows what worked for me, it does not mean there is not another way to achieve same result.
- You can find many other programming SWs. I like PICpgm.
- I was also successful with ElCheapo configuration (using same configuration like for TLVP seems it does same work).
- If you get verification errors, nothing is lost, try to check configuration changes described in step 16.
- 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.
- 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.
- If you want to work with PICs professionally, see some commercial products with debugging capability.
- If you found these information useful, please consider to:
in EUR
in USD
(Article created 11.12.2013)