PIC JDM Prototype Programmer 1001
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.
Features
- 5-wire programming interface:
MCLR/VPP (programming voltage)
VCC (regular +5V supply voltage)
GND (ground)
PGD (programming data)
PGC (programming clock)All these wires are to be directly connected to the PIC to be programmed.
- There is no additional supply voltage required. The PIC programming voltage (around 13V) is generated on-board using a small switching regulator.
- 5V power supply voltage can be delivered by the programmer or by the target system itself. There is a jumper used to determine whether the programmer feeds the +5V or not. There is no contention when +5V is provided by both the programmer and the target system.
- A (green) LED signals whether the PIC supply voltage is around +5V.
- A (red) LED indicates whether the PIC programming is in progress.
- A second jumper can be used to keep the PIC in a reset-state when it is not being programmed. This is important when the PIC to be programmed is normally used with a low-voltage supply (e.g. 3.3V). As the PIC needs to be programmed at VCC=+5V which is normally supplied by the programmer, the PIC would start executing code at +5V immediately after VPP is removed. As a result, some IO-pins might be programmed to output a high-level (i.e. 5V in this moment). This could hurt other circuitry attached to the micro controller when it does not have 5V-tolerant inputs.
- Although it is not a feature: Following the Microchip terminology, the programmer is designated as prototype programmer. This is because the PIC is verified at VDD=+5V instead of +2V as suggested by Microchip.
It would not be a big deal to include such a VDD switching. However, the RS232-based JDM programmer cannot support this feature due to lack of control lines. As a result, most of the existing PIC programming software does not support this as well.
Nevertheless, the programming procedure is working flawlessly so far.
Operational Principle
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.
Requirements for the Target System
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
- As long as those pins of the PIC are not used by the target application there is nothing to take care for. In the other case the designer needs to be aware that those lines will carry 5V levels during programming. Also it has to be ensured that both lines are not actively driven by other circuitry during programming.
VCCApplication VCC = 5V
- When the target system is operating at 5V, there are no special precautions necessary. In this case the target system should be powered by itself during programming. I.e. the jumper used to provide power from the programmer should not be set. When the whole application draws only a few mA it might be safely powered from the programmer.
Application VCC < 5V
- When the target system is operating at a lower voltage some further considerations are required. When the application is completely 5V tolerant (including the output of the voltage regulator) and it draws only a few mA it can be easily supplied by the programmer with 5V. When this is not the case, the supply voltage of the PIC needs to be isolated from the remaining application circuitry. This can be done via a small Schottky diode, when the voltage drop can be tolerated. Another solution would be the use of a jumper used for isolating VDD of the PIC from the rest of the system.
MCLR/VPP
- Due to the 13V, MCLR/VPP has to be isolated from the remaining system in any case. This can be done by a small Schottky diode which isolates the typical R-C power-on-reset circuitry. This avoids the propagation of the 13V programming voltage into the power supply rail of the application circuit.
Programming Software
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.
Supported PIC Devices
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.
Known Odds
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.
Pictures
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.
Copies of the Programmer
For the case someone is interested, it is possible to produce copies of the programming hardware. Just drop me an email: Mario.Trams@digital-force.net
PIC JDM Prototype Programmer 1001的更多相关文章
- javascript原型对象prototype
“我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法.” 引用类型才具有prototype属性 ...
- intanceof以及引出的__proto__和prototype
instanceof运算代码 function instance_of(L, R) { //L 表示左表达式,R 表示右表达式 var O = R.prototype; // 取 R 的显示原型 L ...
- 理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- prototype演变
setp1 var Person = function () {}; //构造器 var p = new Person(); setp1 演变: var Person = function () {} ...
- prototype 与 proto的关系是什么:
__proto__是什么? 我们在这里简单地说下.每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto_ ...
- 转载-对js中new、prototype的理解
说明:本篇文章是搜集了数家之言,综合的结果,应向数家致谢 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: <script type="text/java ...
- 【转】理解js中的原型链,prototype与__proto__的关系
说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...
- ★ prototype、__proto__ 详解
# var Person = function(name) { this.name = name; } var p = new Person(); //new操作符的操作是 var p = {} p. ...
- prototype 与 __proto__
原文:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type= ...
随机推荐
- JAVA中分为基本数据类型和引用数据类型区别
一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...
- 最近公共祖先(LCA)模板
以下转自:https://www.cnblogs.com/JVxie/p/4854719.html 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...
- 记录一次webpackJsonp is not defined
始末: 领导让将最近部署的一部分更改隐藏掉,so,我先不存当前分支内容,创建新分支,在新分支里回滚到上一版本,进行更改操作,一切都么问题,本地vue项目与python项目都运行不报错,但在部署后,报错 ...
- 编译原理之正则表达式转NFA
本文转载自http://chriszz.sinaapp.com/?p=257 输入一个正则表达式,输出一个NFA. 我的做法:输入一个字符串表示正则,输出则是把输出到一个.dot文件中并将dot文件编 ...
- C#中ASCII码与字符串的互换
主要代码: int a = (int)'a';// 把字符直接转换为int类型,即可得到ASCII码值 ).ToString();// 将数字直接转换为char类型,即可得到ASCII码对应的字符 C ...
- java8 - 2
import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util. ...
- USACO 6.5 Betsy's Tour (插头dp)
Betsy's TourDon Piele A square township has been divided up into N2 square plots (1 <= N <= 7) ...
- openfire 部署后报错: java.lang.IllegalArgumentException: interface xx is not visible from class loader
该异常是创建代理时加载接口的类加载器与创建时传入的不一致. 在本地eclipse做openfire二次开发,本地运行没错,部署到服务器上后报异常: java.lang.IllegalArgument ...
- 一步一步写数据结构(BST-二叉排序树)
二叉排序树的重要性不用多说,下面用c++实现二叉排序树的建立,插入,查找,修改,和删除.难点在于删除,其他几个相对比较简单. 以下是代码: #include<iostream> using ...
- ES6-const注意
注意要点 const 如何做到变量在声明初始化之后不允许改变的?其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动.此时,你可能已经想到,简单类型和复合类型 ...