In-Circuit PIC Programmer


I designed this programmer to work with Nigel Goodwin's PIC programming software, because all the other programmers I could find were based on the all-but obsolete 74LS06/07, and were not aimed at in-circuit programming.
I wanted a programmer that would enable me to program my PICs in-circuit, so that I did not have to spend out on a ZIF socket ( I might as well by a Picstart! ) , and would use the 12V supply in the radio as the Vpp programming voltage. I also designed the circuit to work with the low-voltage programming mode available in the 16F87x family (and others?) so that the programmer would work without an external power supply. I also added the option of an external power supply for those times when it is wanted or needed.

So here are the results of my efforts. The programmer has been tested with a PIC16F876 and works OK, taking a 12V supply from the target board. It also seems to work with it's own external supply, but I haven't tried the low-voltage programming mode yet.

You are welcome to use the design for your own non-commercial use, but I retain copyright of the design and PCB layout, so if you wish to make a profit out of it - ask first! Please let me know if you find it useful.

Click to download PIC programmer details The schematic is hand-drawn and scanned. The PCB layout was done using Easytrax so Gerber files and an aperture file are provided. There is a text file for the parts list, and one for the pinout of the cable to connect the programmer to the PC parallel port.
A free Gerber viewer, GC-Prevue, is available from Graphicode Inc and allows you to print to a Windows printer.

Click on the schematic to download the whole lot as a zip file. (159kB)

You will need the following settings for the software:

Vdd D2  
Vpp D3  
Vpp40 D4  
Output D0 Invert
Clock D1 Invert
Input Ack Invert
Prog Delay 10  
Vpp Delay 100  

Oops... I have noticed that the schematic refers to "RA3/PGM" this should be "RB3/PGM". Sorry. I will correct it as soon as I can.


Some Information About Low-Voltage Programming...

The RB3/PGM pin is used for low-voltage in-circuit programming on the 16F87x family. I don't know if it is available on the 'F84 or the 'F62x, the data sheets should tell you.

For a good description of the programming modes and how the RB3/PGM pin works, look at the "PIC16F87x EEPROM Memory Programming Specification" document from Microchip. It's available on their web site / CD, the document number is DS39025E. Similar documents are available for the other devices.

Basically, if you hold the PGM pin high as you come out of reset, the device will enter programming mode. The other method of entering programming mode is to pull MCLR up to Vpp (typ 12V).

For my circuit, with S1 in position A (high-voltage programming) Q1 is held off by R12 and RB3/PGM is not driven. MCLR is driven from 0V to 12V by Q2 when the programmer drives "Vpp" or "Vpp40".

With S1 in position B (low-voltage programming) RB3/PGM is driven high when the programmer drives "Vdd", then MCLR is driven from 0V to 5V by Q2 when the programmer drives "Vpp" or "Vpp40". For low-voltage programming, the target Vcc is used to power the programmer.

Low-voltage programming is enabled/disabled by one of the PICs "configuration bits". By default it is enabled. If you use low-voltage programming, you lose the use of RB3 and you must ensure that your circuit pulls the pin low via a resistor during normal operation.

If your target runs off a single (low-current) 5V supply you could use the programmer to power the target during programming, by connecting together all 3 pins of S1B. However, if you do this, be careful not to power the target and the programmer at the same time from different sources!


Last updated 27 August 2002

Please e-mail me with your comments.
Back to home page
Or, return to the Team BeligerAnt TechTalk index