The Intelligent PIC Programmer



I built a simple PIC programmer for the PIC 16F84A microcontroller that worked on my old Amiga.  The Amiga was getting long in the tooth and I needed a programmer that would preferably work on any machine and that could potentially program any PIC chip with in-circuit serial programming (ICSP).  Ideally the programmer should be able to verify at a lower voltage which distinguishes between hobby programmers and professional programmers.
Well I found a circuit diagram on the 'net that fulfilled the second part but it still used signals from a computer's parallel port to send and receive the data.  So I took that design and incorporated a PIC chip into it to control the lines and implement a serial interface so that it could work on almost any computer with a serial port.  It's "intelligent" because it understands a set of commands and does all the hard work for you.

Intelligent PIC Programmer schematic
You've probably spotted the catch.  Yes, you do need a PIC programmer to program the PIC chip inside the PIC programmer - or know someone who can do it for you.  I had my old parallel port one for that first pass.  Once you've programmed the PIC chip sufficiently well to be able to program another PIC chip, then you're in business! :-)
This is actually the MkII version.  The MkI didn't go to waste though.  I sent it to Aaron, a friend in the USA.
Here's the MkI:
Programmer Mark One
and here's the MkII:
Programmer Mark Two    Programmer Mark Two Cased
By fitting a chunk of breadboard to the top of the box, the flying leads can be arranged to handle the pin-out of any PIC chip and there's enough room to build an entire circuit on the top if you want to.

Now you need the source code for the programmer and the host.  Here it is.  The host program, linpps, requires the GNU C compiler et al.  The programmer source code was designed for use with the gputils tools.  The linpps program is not pretty but it does the business.  It is currently hard-wired to handle the PIC 16F84A but feel free to modify it. :-)
So could it be better?  The 4MHz 16F84A in the circuit can only manage a serial port running at 19200 bps.  You can get versions of it now that run at 20MHz but you would have to go through and alter all the timing routines and tweak the RS232 code to compensate for the faster execution.  You could stick a USB->Serial chip in there to make it a USB PIC programmer but I've got a standalone USB->Serial converter cable so this way I can use it with either interface.

<Back>