In need of a programmer for PIC micro controllers I decided to build my own one. This programmer has been designated as "PIC JDM Prototype Programmer 1001" because it is very likely the 1001st PIC programmer :-)
The programmer is basically operating as a JDM-programmer. Any programming software that is compatible with JDM hardware might be used for programming. The major advantage over typical JDM programmers is that it connects to the programming host via USB and not via an RS232 interface. USB has the advantage that it delivers regular power along with data transmission. Though, existing programmers show that the power can be taken with some tricks from the RS232, but I do not like that...
Another advantage of a USB connection is that most new notebook computers do not provide an RS232 interface any longer.
This programmer is specifically designed for in-system programming, or "In-Circuit Serial Programming" (ICSP) as it is designated by Microchip. I.e. the PIC to be programmed is already soldered into the target system.
The core component is an USB<->Serial converter chip (FT232BM) fromFTDI. The according driver provides a serial interface functionality and makes the USB connection transparent. This allows the use of existing programming software without any modification.
The programming voltage (approx. 13V) is generated using a small switching regulator circuitry. Some other circuitry is needed for programming voltage switching etc.
A few precautions need to be taken in order to guarantee a flawless operation of the target system itself as well as its interoperation with the programmer.
PGD and PGC
VCCApplication VCC = 5V
Application VCC < 5V
MCLR/VPP
As described above, virtually any JDM programmer software can be used. I have successfully used Picprog (Rev. 1.7) under Linux. IC-Prog is working fine as well under Windows XP.
Provided the used programming software does support the chip, all Flash-based PICs should be supported by the programmer. Until now, this device has been used successfully with PIC16F73, PIC16LF74, and PIC16LF77.
The only problem that appeared so far is a rather slow programming speed. While the programming of some test-system with a certain test-code and a native RS232 interface took just a fraction of a second, it took around 2 minutes when using the USB-controlled programmer. Under Windows (using IC-Prog) the situation is even more worse.
Meanwhile, the reason for this slow speed has been figured out. Unfortunately, it is not a driver or configuration problem as initially suspected. Rather it is an inherent "feature" of USB. The problem is that the nature of USB introduces latencies of at least 1ms. Because the JDM programmer's serial data transmission is based on switching the RS232 signals RTS and DTR, each toggling of these lines requires one USB transaction. And every USB transaction brings along a delay of at least 1ms (in practice, I measured around 1.4ms in best case). In order to get an idea about the relations, the same operation with a natural UART on the same machine takes just 2 micro seconds - that is 700 times faster.
The only solution to fight with this issue is to off-load the actual programming task to a small external micro controller that is controlled via USB. As one example, some Programmers of Tony Nixon (see here) show how this can be done. Although there is nothing written about programming times, the speed should be quite high. Though, it won't be possible to use well-proven existing programming software such as Picprog or IC-Prog. But on the other hand, programming these micro controllers is not that complicated.
The board has all components mounted on the top side. The bottom side is empty and contains mostly a big ground plane.
This is a perspective view including an attached programming cable.
For the case someone is interested, it is possible to produce copies of the programming hardware. Just drop me an email: [email protected]