AN589 is microchip's application note for a parallel port pic programmer circuit which I chose as I wanted something reliable to get up and running quickly.
Note: This page is left on site for legacy information that is applicable to older computers. These days PCs and laptops have only a USB interface so a parallel programming circuit is not useful. instead you should be using a PicKit3 (or maybe PicKit2) programmer which interfaces to the MPLAB X IDE and works well.
It is really
quite a simple circuit and its main objective is to provide ICSP
connections to your pic microcontroller.
Here is the pcb version (click to enlarge):
Note: That the PGM signal is not provided - it's not really necessary anyway as you can turn off PGM mode by programming the chip. For first use of a chip you will need to pull the PGM line low as PGM is enabled by the manufacturer.
Disclaimer : If you build this circuit you must double check each connection to the parallel port cable to avoid damage to your computer. This includes checking for shorts between each pin at the parallel port on your circuit. For initial testing it is best if you use a spare (old computer). Building this project is your own responsibility and I can not be held responsible for any damage to your computer.
It has a few modifications that are useful and easy to do:
The transmission line termination lets you use the pic programmer circuit at the end of a long cable - I am using a normal parallel cable ~6 feet long. If you want to know more about transmission line terminations then follow this link.
When I first tried to use it I got all kinds of random results so it is worth adding the termination.
The LM317 saves you needing an accurate bench power supply - you can use a dc power block - anything that supplies more than about 15V dc. If you don't use a 317 it's just too easy to accidentally apply the wrong voltage by turning the dial on a bench supply and frying your microchip. Using the 317 lets you put up to 35V into it (you shouldn't but you can).
Note: the LM317 and LM78L05 are standard components and are easy to find.
To save using odd resistor values I used a 10k and a 1k to set 317 output voltage. The equation for the LM317 is:
Vo = 1.25 * (1+10k/1k2) = 11.66V
Following on from this is the 5 volt regulator which is only used to power the LS244 buffer. Its just not worth using a Zener diode supply as the actual voltage at the Zener varies with the load (it's voltage is only specified for a constant current through it) you then need a transistor to isolate the Zener so its just easier to use the three pin regulator.
Note: The pin out of the LM78L05 is different to its larger counterpart the LM7805.
It is not a good idea to power the board from the programmer as :
If you want to power your board from the programmer then change the 78L05 for a 7805 which can supply up to 1A but for higher current it will need a heatsink.
The pic programmer circuit is a bit wasteful as it only uses two gates from the eight available in the LS244 but it's a cheap part anyway.
Q1, Q2 and Q3 can be replaced with any standard general purpose transistors (two npn and one pnp).
You can use ICPROG with this pic programmer circuit. It erases, programs and verifies your pic microcontrollers.
ICPROG also controls resetting the microcontroller at the end of verify so after programming and verifying the program will start.
ICPROG is a good choice for programming software as it has many programming algorithms for many devices (not just PIC microcontrollers) and it is FREE. It also specifically supports this type of pic programmer circuit i.e. the AN589 pic programmer circuit.
Jump from pic
Best-microcontroller-projects home page
The Essential Guide to the 74HC595; What it is and how you can easily use one in any of your projects.
Which pic programmer do you need? This page discusses PIC programmers and gives some essential information on choosing or building your own programmer.
learn how to use Arduino pulseIn and pulseInLong to get the most accurate pulse measurement on an Arduino.
How to use Arduino millis() for deylays but still make the processor do work - Stop using delay()
This MCP23017 Interrupt tutorial shows you how to connect interrupt outputs from several MCP23017s to a single microcontroller interrupt pin.
Arduino Delay() is a useful function but not for large programs - Find Out Why Here...