Covington Innovations

NOPPP, the "No-Parts" PIC Programmer

Last revised 1999 March 10

Kits available!

Updated software!

Updated circuit!


What's new:


Having problems learning to use MPLAB? See these brief notes.

Thank you for your interest in NOPPP. I am glad to help builders with problems, but before contacting me, please read this web page carefully, download the latest software (revised March 10, 1999), run the voltage test sequence that the software provides, and record the results. Because of limited time, I can only help people with the circuits actually published here, not with modifications.

(Picture of NOPPP)

NOPPP is a simple programmer for PIC16C84, PIC16F83, and PIC16F84 microcontrollers. It attaches to the parallel port of a PC. Plans were published in Electronics Now Magazine, September, 1998, and are included in shorter form in the downloadable ZIP file.

Download NOPPP.ZIP now


Although not precisely "no parts," NOPPP is unusually simple and uses no hard-to-find parts. You can probably build it using parts you already have on hand. Here's the circuit:

(Circuit diagram)

Circuit description: On the PIC, pin MCLR is +5V for normal operation (not used here), +12V for writing, and 0V for resetting. Crucially, the +12V supply does not actually "burn an EPROM" -- the higher voltage is merely a signal to activate the internal flash memory programming circuit. It must be greater than 12.0 volts. The D0 output of from the PC controls this signal. No harm results from applying it at inopportune times.

The PIC communicates by means of a two-wire (plus ground) synchronous serial protocol. Pin B6 is the strobe signal; pulses on it tell the PIC when to accept or transmit each next bit of data. Pin B7 is both an input and an output. When the PIC is receiving from the PC, SLCTIN is held low and D2 does not conduct; D1 and R1 are effectively out of the circuit, and the PIC receives data from AUTOFD.

When the PIC is sending, SLCTIN and AUTOFD are high, D1 does not conduct, and D2 and R1 provide pull-up. Some additional pull-up is provided by R2 plus the pull-up resistor on AUTOFD inside the PC's parallel port (nominally 4.7k, sometimes much lower in newer CMOS parallel ports). The PC reads the data on the BUSY pin, which is 0.6 volt higher than the output of the PIC because of D2. The PC parallel port has (or should have) CMOS or Schmitt inputs and should not require true TTL logic levels.

R2 and R3 help to reduce cable crosstalk by isolating the input capacitance of the PIC so that less current flows during sudden transitions. The PIC has Schmitt inputs and does not object to the resulting reduction in rise time. R4 protects the base of Q1.

Revised circuit: The original circuit and software are quite reliable. However, for greater compatibility with a few PC parallel ports that had trouble with the original, I have also developed a revised circuit:

(Revised circuit)

The changes accomplish the following: Again, if you have the original circuit working, there is no need to make these changes. However, a very few PCs with nonstandard parallel ports or poor-quality cables benefit from them.

Frequently asked questions about NOPPP


Alternative NOPPP circuit

For those of you who are uneasy with the use of diodes in NOPPP, here's an alternative NOPPP circuit I've been experimenting with that uses logic gates. The inputs and outputs are modeled on those of the original IBM PC printer port; the capacitors reduce cable reflections. This NOPPP may give superior performance with long cables and with finicky parallel ports. I thank Glenn Hudson of SUNY, Stony Brook, for suggesting replacing the diodes with gates.

Note that this is an experimental circuit and may or may not work with your PC.

Alternative NOPPP circuit



PIC consulting services

I provide a consulting service to design PIC-related software and hardware for clients. See my main web page for rates and other information.


Covington Innovations home page