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. 正则表达式之你不知道的replace

    我们都知道js内置类String提供了一个replace方法,可以把指定字符串替换为另一个字符串,他的基础用法如下: var str="hello world"; var str= ...

  2. 网络协议之TCP

    前言 近年来,随着信息技术的不断发展,各行各业也掀起了信息化浪潮,为了留住用户和吸引用户,各个企业力求为用户提供更好的信息服务,这也导致WEB性能优化成为了一个热点.据分析,网站速度越快,用户的黏性. ...

  3. Codeforces 807C - Success Rate(二分枚举)

    题目链接:http://codeforces.com/problemset/problem/807/C 题目大意:给你T组数据,每组有x,y,p,q四个数,x/y是你当前提交正确率,让你求出最少需要再 ...

  4. ViewPager中的子Activity无法响应OnActivityResult的解决方法

    ViewPager子Activity通过startActivityForResult()跳转至OtherActivity,OtherActivity回传结果由ViewPager所在的父Activity ...

  5. LoadRuner常见错误

    LoadRuner常见错误 一.Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤: 1. 修改run time setting中的 ...

  6. Gitlab-API各状态码解释

    200 – OK : This means that the GET , PUT, or DELETE request was successful. When you request a resou ...

  7. 再议js的传递和深复制

    病理 基本类型的传递就是按值传递,比如说 var a = 1; var b = a; b = 3; console.log(a,b);//1,3 很明显,a的值并未因为b的值改变而变化,这是因为a只是 ...

  8. awk 提取列

    awk '{OFS="";print(substr($0,1,6),substr($0,74,18),substr($0,15,3),substr($0,18,8))}' inpu ...

  9. 把eclipse写好的web项目导入idea 部署到Tomcat

    主要分为项目配置和tomcat配置两大步骤. 一.项目配置 打开idea,选择导入项 选择将要打开的项目路径后,继续选择项目的原本类型(后续引导设置会根据原本的项目类型更新成idea的项目),此例中选 ...

  10. 减少TIME_WAIT连接状态

    减少TIME_WAIT连接状态.网络上已经有不少相关的介绍,大多是建议: shell> sysctl net.ipv4.tcp_tw_reuse=1 shell> sysctl net.i ...