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的更多相关文章

  1. javascript原型对象prototype

    “我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法.” 引用类型才具有prototype属性 ...

  2. intanceof以及引出的__proto__和prototype

    instanceof运算代码 function instance_of(L, R) { //L 表示左表达式,R 表示右表达式 var O = R.prototype; // 取 R 的显示原型 L ...

  3. 理解js中的原型链,prototype与__proto__的关系

    说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...

  4. prototype演变

    setp1 var Person = function () {}; //构造器 var p = new Person(); setp1 演变: var Person = function () {} ...

  5. prototype 与 proto的关系是什么:

    __proto__是什么? 我们在这里简单地说下.每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto_ ...

  6. 转载-对js中new、prototype的理解

    说明:本篇文章是搜集了数家之言,综合的结果,应向数家致谢 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: <script type="text/java ...

  7. 【转】理解js中的原型链,prototype与__proto__的关系

    说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type="text/javascript"> 2 var Pers ...

  8. ★ prototype、__proto__ 详解

    # var Person = function(name) { this.name = name; } var p = new Person(); //new操作符的操作是 var p = {} p. ...

  9. prototype 与 __proto__

    原文:http://rockyuse.iteye.com/blog/1426510 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: 1 <script type= ...

随机推荐

  1. SHELL 中的变量

    变量的分类 系统环境变量 系统本身所有,通常为大写字母 系统变量通过 set 或 declare 指令进行查看 UDV 变量(user defined variable ) 用户创建和维护,建议大写 ...

  2. java基础30 List集合下的LinkedList集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  3. arp命令 清arp表

    平常删除arp都用arp-d.大量存在的时候 arp -n|awk '/^[1-9]/ {print arp -d $1}' | sh 清除所有arp表,以前用这个来清arp表貌会清空,没注意到存在i ...

  4. JavaScript 中的回调函数

    原文:http://javascriptissexy.com/ 翻译:http://blog.csdn.net/luoweifu/article/details/41466537 [建议阅读原文,以下 ...

  5. KMP模板及总结

    KMP是一种字符串匹配算法,它在时间复杂度上较暴力匹配算法由很大的优势.比如我要找字符串S中是否存在子串P,如果暴力匹配的话,则时间复杂度为O(n*m),而kmp算法时间复杂度为O(n+m). 这里我 ...

  6. c语言循环链表的问题

    今天,老师说了一道题,大意是,有一群小朋友10个人,但是老师只有一个苹果,只能给一个小朋友,于是老师就决定让小朋友们做成一圈,从第一个小朋友开始,每隔一个小朋友就没有机会得到苹果,最后剩下的一个人可以 ...

  7. 关于利用GPG加解密的实验

    GnuPG(GNU Privacy Guard,简称:GPG)为一款免费开源的使用非对称密钥加密(asymmetric cryptography)之软件,最初由Werner Koch开发,该软件使用非 ...

  8. 转58同城 mysql规范

    这里面都是一些很简单的规则,看似没有特别大的意义,但真实的不就是这么简单繁杂的工作吗? 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 ( ...

  9. [水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接

    问题 想创建一个从 ASP.NET MVC controller 到 ASP.NET Web API controller 的直接链接,或者反向链接. 解决方案 可以使用 System.Web.Htt ...

  10. linux下文件转码

    一.工具介绍 enca是一个很好用的文件转码工具,使用命令 sudo apt-get install enca 即可安装 二.基本用法 1.查看文件编码 $ enca filename 2.文件转码 ...