[PIC]全ピン数対応のライタ基板を製作(PICkit3使用)



半年ほど前、PICのライタとしてPICkit3を購入しました。
これまで書き込み側の回路はブレッドボードで組んでいたのですが、ブレッドボードだと書き込み/デバッグ中にライタが外れてしまう事もあり不便でした。

ライタは頻繁に使いますしPICの開発も慣れてきたので、今回、書き込み用の回路をユニバーサル基板で作成する事にしました。
PICはブレッドボードにさせるタイプのPDIP形式のものだけでも、ピン数が8, 14, 18, 20, 28, 40ピンと6種類も有り、それぞれ書き込みピンの位置が異なるので、これら全種類に対応できるようにします。

また、ライタにPICを刺したまま状態で、簡単な回路なら確認できるようにもしておきます。


PIC Writerのピンアサインを確認

今回はPICのライタとPICkit3で書き込めるような基板を考えます。
ですので、まずはPICkit3のピン配置を確認します。

ピン配置は、PICkit3ユーザガイドを確認すると、以下の通りである事が分かります。


Pin番号 接続先
------- --------------
1       MCLR/VPP
2       VDD
3       Ground
4       PDG (ICSPDAT)
5       PGC (ICSPCLK)


PICkit3からは6本のピンが出ていますが、6番ピンのLVPは使用しないので無視します。
LVPは、Low Voltage Programmingの略で低電圧プログラミングを行う事に使います。


PICのピン配置確認

次に書くピン数毎に、ピン配置を確認します。
PICはピン数が同じなら、基本的に書き込みに関するピンのアサインは同じです。

ですので、ピン数だけ気にすればどの製品でチェックしても良いのですが、今回はPIC16,12シリーズでピン数別お勧めPICとして選ばれていた以下の商品で確認します。

 8pin : 12F683
14pin : 16F688
18pin : 16F88 
20pin : 16F690
28pin : 16F886
40pin : 16F887




というわけでデータシートより確認した結果です。書き込みに関係するピンの背景色を変えて有ります。

色とピン番号の対応は抵抗のカラーコードと同じで、以下の通りです。

Pin番号 色
------- ----
1       茶
2       赤
3       橙
4       黄
5       緑




8ピン: 12F683


14ピン: 16F688


18ピン: 16F88


20ピン: 16F690


28ピン: 16F886


40ピン: 16F887


おまけ:この画像を作るのにPaint.NETを使用したのですが、その時使用した*.pdnファイルです-> ダウンロード:PicPinAssign_pdn.zip



色の付いたピンの位置をよく見比べてみると、以下のことが分かります。

40,28ピンのPICは上端を合わせれば位置が同じになる。
20,14,8ピンも同じです
18ピンは他と異なるので別途対応が必要です。



という訳で、書き込みピンだけ見ると大きく3種類になります。但し28/40ピンはVcc/GNDピンが複数有り、場所が異なるのですが、片側だけ繋いでおけば書き込みには影響しないようです。
(もし影響が出る場合は、後述のピンソケットで配線して対応する事にします)

また、ピン幅は300milのものと、600milのものが有ります。
milというのは1/1000インチの事で、要はブレッドボードの幅3マスと6マスという意味です。

この辺はゼロプレッシャーのソケットで幅にゆとりがあるものを使用します。

回路図

PICkit3の場合、1ピンと2ピンを10kの抵抗でつなぐ必要があります。
これと、上記のピン配置を考慮すると以下の様な配線となります。



部品を購入する

回路図を書いたら、次に必要な部品を購入します。

回路図の上では、ゼロプレッシャーのコネクタが3つとなっているのですが18ピンのゼロプレッシャーは無いので、普通のICソケットで代用します。
20ピンのほうは売っているのですが、たまたま買出しに行ったときに売り切れにだったので28ピンのソケットで代用する事にしました。


ユニバーサル基板は、後で回路を追加できるようにちょっと余裕を見て、大きめのサンハヤトのICB-96を使用します。ICB-96は0.1inchピッチで、55×45の穴が空いてます。


簡単な実験だったらライタ上でジャンパを飛ばすだけでブレッドボードと配線できるようにしておきたいので、ソケットの横にピンソケットをつける事にします。
ピンソケットは14×2のものが2個と10×2のものが2個です。
(あと、18ピンPIC用にシングルのピンソケットが18ピン分必要ですが、写真を取り忘れました…)


あと必要なものは、ピンヘッダ、抵抗やLED等ぐらいです。


ユニバーサル基板で組み上げる

購入したパーツを実際にユニバーサル基板においてみます。

今回は、以下の様な感じに配置する事にしました。


PICライタのPICkit3とは18ピンソケットの上にあるピンヘッダで接続します。
どっちが1ピンが分かりやすいように、修正液でマーキングしておきます。



裏面は、こんな感じです。
回路は単純ですが、ICソケットの横にピンソケットを追加したので、作業量がちょっと多くなります。



この手の同じパターンが連続する配線作業は1本づつ仕上げていくと面倒なので、全てのピンを1作業づつ一気に進めたほうがはかどります。

どういう事かというと、例えば下の画像は40ピンソケットの配線ですが、左側を見るとまず、左端のソケットに、スズめっき線をつけてしまいます。


次に、全て右側をハンダします。


そして、最後に真ん中をつける。というようにすると、同じ作業が続き道具の持ち替えも少なくなるので作業が速いです。



基板にスペースが余っているので、動作確認用のLEDを8個右上に追加しました。


こちらの裏側はこんな感じです。
左上につながっている白いジャンパ線は、PICライタ側のGNDとつながっています。
スズめっき線でつないでしまってもよかったのですが、負論理にしたいことがあるかもしれないので、つなぎかえが楽なようにジャンパ線での仮接続に留めてます。


配線が完了したら誤配線が無いか、テスタで通電チェックします。


動作確認

問題が無さそうならPICkit3を接続して、動作確認用のプログラムを動かしてみます。
今回は18ピンの16F88を使用して、LEDの点灯プログラムを作ってみました。

LEDは8個用意したので、RB0-5とRA0,RA1を使用します。
本当はRB0-7の8ピンで分かりやすく繋ぎたかったのですが、16F88はRB6,7がライタの書き込み用で使用するため、本基板では使えません(デバッグ実行が出来なくなります)。

配線用のソケットを作っておいたおかげで、さくっと配線出来て便利です。



コードは以下の様な感じです。
HI-TECH C用ですが、特に難しいところは無いので説明は省略します。

#include <stdio.h>
#include <htc.h>
 
__CONFIG (  FOSC_INTOSCIO & // 内部クロック
            WDTE_OFF &      // watchdogオフ
            PWRTE_OFF &     // Power-up Timer
            MCLRE_OFF &     // MCLRピンを汎用I/Oとして使用
            BOREN_OFF &     // 電圧降下によるリセットオフ
            LVP_OFF &       // Low-Voltage Programmingオフ
            CPD_OFF &       // EEPROM  プロテクトオフ
            WRT_OFF &       // FrashROMプロテクトオフ
            DEBUG_ON &      // ICDデバッグを有効にする
            CCPMX_RB0 &     // RB0をCCPとして使用
            CP_OFF );       // コードプロテクトオフ
 
 
void SetLED( unsigned char data );
 
void main( void )
{
    unsigned long int loop = 0;
    unsigned char data = 0x01;
    ANSEL = 0;
    T1CONbits.T1OSCEN = 0;  
    TRISB = 0x00;
    TRISAbits.TRISA0 = 0;   // RA0を出力にする
    TRISAbits.TRISA1 = 0;   // RA1を出力にする
 
 
    while( 1 ) {
        // LEDを点灯
        SetLED( data );
 
        // ちょっと待つ
        for ( loop = 0; loop < 20; loop++ ) {
            ; // nop
        }   
 
        // 表示するLEDをずらす
        if ( data == 0x80 ) {
            data = 0x01;
        } else {
            data <<= 1;
        }
    }       
 
}
 
// 指定されたビットに対応するLEDを点灯する
void SetLED( unsigned char data )
{
    PORTBbits.RB0 = (data & 0x01) ? 1 : 0;
    PORTBbits.RB1 = (data & 0x02) ? 1 : 0;
    PORTBbits.RB2 = (data & 0x04) ? 1 : 0;
    PORTBbits.RB3 = (data & 0x08) ? 1 : 0;
    PORTBbits.RB4 = (data & 0x10) ? 1 : 0;
    PORTBbits.RB5 = (data & 0x20) ? 1 : 0;
    PORTAbits.RA0 = (data & 0x40) ? 1 : 0;
    PORTAbits.RA1 = (data & 0x80) ? 1 : 0;
}




上記プログラムを実際に動作させた結果です。
いい感じに動作してくれました。




TODO

今回の製作でとりあえず満足するものが作れましたが、まだスペースが有るので、そのうち以下の辺りぐらいはチェック用回路を増設しておきたいところです。

スイッチ(タクトスイッチx4個ぐらい?)
可変抵抗によるアナログ入力
シリアルポート
USBポート
ブザー
キャラクタLCD


関連記事

4 Responses to “[PIC]全ピン数対応のライタ基板を製作(PICkit3使用)”

  1. 日浦道雄 より:

    早速ですが、上記配線図でPicKit3の△印と何番、
    ピンを接続すればよいですか?
    宜しくお願いします。

  2. 関島芳章 より:

    回路図で、10kΩの抵抗を1ピンと2ピンに接続する様に文章にありますが、回路図そのものは、1ピンと3ピンに接続されています。
    どちらかが、間違っています。

  3. さとこ より:

    文章の通り、抵抗を1ピンと2ピンに接続するのが正解で、回路図(と製作された基板)が間違っているように思います。
    PICのデータシートには、書き込み時にはMCLRをLレベルするよう記載されていますので、抵抗を1ピンと3ピンに接続することでMCLRがプルダウンされ、結果的に書き込みができてしまっているのではないでしょうか。
    PICをかじり始めたばかりなので、間違っていたらすみません。

  4. たけぴょん より:

    >回路図の上では、ゼロプレッシャーのコネクタが3つとなっているのですが18ピンのゼロプレッシャーは無いので、普通のICソケットで代用します。

    と書かれていますが普通に販売されていますのでs参考までに紹介しておきます。


    http://jikken.jp/kawaiiko/pic16f/zp18.jpg

関島芳章 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。