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. 虚拟机 ubuntu 16.04

    下载地址:https://www.ubuntu.com/download/desktop 使用虚拟机直接安装

  2. javaweb作业一

    作业:Http全称叫什么?有什么特点?端口号是多少?超文本传输协议:(1)遵循请求/响应模型(2)http协议是一种无状态协议,请求/响应完成后,连接会断开.这时,服务器无法知道当前访问的用户是否是老 ...

  3. 插入标识列identity_insert

    插入标识列identity_insert 在进行数据插入时,如果插入列名包括标识列,常常会遇到以下3种提示: 一.“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'xxxxxxxx ...

  4. 分析Windows的死亡蓝屏(BSOD)机制

    这篇文章本来是投Freebuf的,结果没过.就贴到博客里吧,图懒得发上来了 对于Windows系统来说,被人们视为洪水猛兽的蓝屏也是一种有利于系统稳定的机制.蓝屏其实是Windows系 统的一种自查机 ...

  5. more命令 less命令

    more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作.more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行), ...

  6. hdu 5475 模拟计算器乘除 (2015上海网赛H题 线段树)

    给出有多少次操作 和MOD 初始值为1 操作1 y 表示乘上y操作2 y 表示除以第 y次操作乘的那个数 线段树的叶子结点i 表示 第i次操作乘的数 将1替换成y遇到操作2 就把第i个结点的值 替换成 ...

  7. CCF CSP 201412-4 最优灌溉

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-4 最优灌溉 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖 ...

  8. bzoj 4551

    4551 思路: 乱搞: 代码: #include <cstdio> #include <cstring> #include <iostream> #include ...

  9. Rookey.Frame之菜单设置

    在上一篇博文 Rookey.Frame企业级快速开发框架开源了 中我们介绍了Rookey.Frame极速开发框架的最新更新及开源介绍,后面慢慢介绍该框架的使用方法,本人文笔不好,写得不够好的地方请大家 ...

  10. USACO 4.3 Letter Game (字典树)

    Letter GameIOI 1995 Figure 1: Each of the 26 lowercase letters and its value Letter games are popula ...