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. 洛谷P2812校园网络

    传送门啦 其实这个题只要读懂分析好题意就不是很难. 就是将一个有向图进行缩点操作,把一个强连通分量看成一个点,求入度为 0 的点和出度为 0 的点各有多少. 在这里先向大家推荐两个题目,建议大家先去看 ...

  2. Javascript之浏览器兼容EventUtil

    var EventUtil = { //添加事件处理程序 addHandler: function (element, type, handler) { if (element.addEventLis ...

  3. (五)动态SQL

    第一节:if条件 第二节:choose,when和otherwise条件 第三节:where条件 1.自动加上where: 2.如果where子句以and或者or开头,则自动删除第一个and或者or: ...

  4. 在SQL中有时候我们需要查看现在正在SQL Server执行的命令

    在SQL中有时候我们需要查看现在正在SQL Server执行的命令.在分析管理器或者Microsoft SQL Server Management Studio中,我们可以在"管理-SQL  ...

  5. jquery中获取iframe的id的方法:

    jquery中获取iframe的id的方法: var frameId = window.frameElement && window.frameElement.id || ''; al ...

  6. PHP性能调优,PHP慢日志---PHP脚本执行效率性能检测之WebGrind的使用

    如何一睹webgrind这个神奇的php性能检测工具神奇呢? 废话不多说首先webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文 ...

  7. 动态页面技术JSP/EL/JSTL

    本节内容: jsp脚本和注释 jsp运行原理 jsp指令(3个) jsp内置/隐式对象(9个) jsp标签(动作) EL技术 JSTL技术 JavaEE的开发模式 动态页面技术:就是在html中嵌入j ...

  8. Monaco Editor 使用入门

    以前项目是用ace编辑器的,但是总有些不敬人意的地方.前端事件看见的VS Code编辑器Monaco Editor准备更换下,下面介绍一些使用中遇到的一点问题.代码提示 1.项目引用 import * ...

  9. codeforces 354 D. Transferring Pyramid

    D. Transferring Pyramid time limit per test 3 seconds memory limit per test 256 megabytes input stan ...

  10. CROC 2016 - Elimination Round (Rated Unofficial Edition) E - Intellectual Inquiry dp

    E - Intellectual Inquiry 思路:我自己YY了一个算本质不同子序列的方法, 发现和网上都不一样. 我们从每个点出发向其后面第一个a, b, c, d ...连一条边,那么总的不同 ...