2025.4.3
前へ

ホームページトップへ戻る


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第250回]



●DEVICE IDを確認

今回からPIC WRITERプログラムの第2段階に入ります。
最初はPIC18F用のWRITERからスタートしました。
途中からPIC16F用WRITERプログラムの作成作業にかかりました。
PIC18FとPIC16Fとではかなりプログラムに違いがあります(そのはずだったと認識しているのですが)。
そこのところはいずれ確認します。
いずれはPIC18F用WRITERとPIC16F用WRITERとを1本のプログラムにまとめてしまうつもりです。
現行のPIC WRITERプログラムはPIC18F13K50に書いています。
最終的にもPIC18F13K50でいくつもりです。
今のところはテスト作業をしながらプログラムを作っていますから対象になるPICごとにプログラムを作ってそれぞれ別のPIC18F13K50に書いてテストをしています。

話がややこしくなりますからとりあえずはPIC18Fについてはしばらく置くことにします。
当面のところはPIC16Fにターゲットをしぼります。
いままでいくつかのPIC16FについてWRITERプログラムを書いてテストを行ってきました。
その過程でいくつかのPIC16Fについては同じWRITERプログラムでできるものがでてきました。
同じWRITERプログラムではだめなものも始めから終わりまで全く別のプログラムでなければならないというのではなくてその一部を書き換えれば使えるという認識を得ました。
おそらくこれからいろいろなPICを入手して試していくことになるかと思います(すでに入手済みのPICもたくさん持っています)。
それを今までのように毎回別々のWRITERプログラムとして個別に作成してそれをPIC18F13K50に書いてテストをしていたのでは時間がかかって堪りません。
今までいくつかのPIC用に作ってきたWRITERプログラムを見直して整理すれば、次に試すべきPICに対してもWRITERプログラムの中で例えばERASEであるとかPICWRであるとかのパートごとに類型化したもののなかから適合するものを選択することでそのPIC用のWRITERにすることができるのではないかと思います。
つまりPICごとにERASEはこれを、WRITEはこれを、というようにプログラムの中で選択することができればまとまった1つのWRITERプログラムでいろいろなPICの書き込みに対応できることになります。

個別のPICごとのWRITERプログラムのための情報はとりあえずいままで試したPICについては別々のWRITERプログラムとしてあります。
それを1つのプログラムにまとめることももちろん可能です。
そこまでできれば次はそのPIC WRITERプログラムにPICの型番を指定すれば同じ1つのWRITERプログラムを使ってすでに登録済みのPICになら書き込むことが可能になります。
またまだ試していないPICでもその書き込みのための情報をWRITERプログラムに書き加えることでそのPICに対して書き込みテストを行なうことが可能になります。
そこのところまでは以前から考えていました。
当初はPIC WRITERのスタート時にターゲットのPICの型番を入力するという方法を考えていました。
しかし考えてみればいちいちPICの型番を入力するというのも面倒な話です。
できればPICの型番をWRITERプログラム自身が書き込み前に認識し、対応するプログラムルーチンを選択してから書き込みをするというようにすれば使い勝手がよくなります。

これまで作業をしてきた中で多くのPICには個別のDEVICE IDなるものが付与されていて、それはPIC WRITERプログラムで読み出すことが可能であることがわかってきました。
それならば。
やれるじゃありませんか。

しかしひとつ問題があります。
VPP電圧には幅があるという点です。
特にERASEやWRITEには決められた範囲のVPP電圧を与える必要があるようです。
DEVICE IDを読み出すときにもその幅の範囲内でなければならないのか?
そこは押さえておかなければいけませんでしょう。
もしかすると、PICによってはVPPが既定値以下の低い電圧では読み出せないということもあるかもしれません。
そういうことがあればそれはそのときまた対応策を考えてみることにします。
あれこれ悩まずまずは試してみるのが一番でありましょう。
はじめの一歩です。

ということで。
さっそく現行のプログラムに手を加えてDEVICE IDを読み出してみました。
テストを行なったVPP電圧は個別のPICの既定には依らずに一律に+9Vに設定しました。
DEVICE IDを読み出すために/PICIDCKコマンドを作りました。
下はいままでテストしたPIC16Fに対して/PICIDCKコマンドを実行してみたときのログにあとからコメントを書き加えたものです。
logfile piciolog\0401175954.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[68][07][71][3F][FC][3F] *PIC16F88 076X
>/picidck
400C[25][07][FF][3F][FF][3F] *PIC16F87 072X
>/picidck
400C[A0][07][FF][3F][FF][3F] *PIC16F627 07AX/BX
---------------------------- *PIC16F628 07CX/DX
>/picidck
400C[68][10][F9][3F][FF][3F] *PIC16F628A 106X/7X
---------------------------- *PIC16F627A 01AX/BX
---------------------------- *PIC16F648A 010X/1X 
>/picidck
400C[FF][3F][FB][3F][FF][3F] *PIC16F84 ID none (also PIC16F83)
>/picidck
400C[60][05][FF][3F][03][00] *PIC16F84A 056X/7X
>/picidck
400C[E2][2C][E4][3F][FF][3F] *PIC16F1503 2CEX/FX
>/exit

リモート接続を終了しました
logfile closed at Tue Apr 01 18:20:39 2025

先頭の2バイトがDEVICE IDです。
DEVICE IDは14ビットです。
たとえば[68][07]は下位8ビットが[68]で上位6ビットが[07]です。
/PICIDCKの次の行が結果の表示です。
400Cの次の[][]がDEVICE IDです。
その行の右の*の後ろにそのときPIC WRITER回路のテストソケットにセットしたPIC名とData Sheetに記載されていたDEVICE IDを追記しました。
−−−−−−−−−−−−−−−の後ろの表示は手持ちがなくてテストはできないけれどその上のPICと同じ書き込みプログラムでできるPIC名とそのIDです。
PIC16F84と16F83にはDEVICE IDはありません。
そういうPICに対してはIDを読み取ることができませんからPIC名を指定する必要があります。
上のログではいままでテストをしてきた全てのPICのIDの読み出しテストをしたのですがPIC16F84以外はすべてVPP=9VでそれぞれのDEVICE IDが正しく読み出せました。

とりあえずDEVICE IDの読み出しは成功です。

超ローコストPICWRITERの製作[第250回]
2025.4.3 upload

前へ

ホームページトップへ戻る