2025.6.10
前へ
次へ
ホームページトップへ戻る


超ローコストPICWRITERの製作

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

[第299回]



●PIC16F1455(5)WRITE/READできました

LVP=1の意味を読み違えて”レガシイ”な端子に対するWRITE/READをしていたためデバイスIDすら読み出すことができず思い切り悩んでしまったのでしたが。
どうやらとんでもない愚かな思い違いをしていたらしいことに気がついてRC0/RC1を信号端子とするように追加配線を行ないました。
本当はテストソケットに配線できるとよかったのですが既存の配線とぶつかってしまいます。
そこで前回は普通の14pinのICソケットを使ってそこにPIC16F1455用の配線をしました。
その14pinソケットにPIC16F1455をセットしていざテストです。
まずはデバイスIDを読み出してみました。
logfile piciolog\0606183749.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[21][30]
>

おお。
デバイスIDが読めました!
3021です。
正しい値が読み出せています。


[出典]Microchip Technology Inc. PIC16F145X Memory Programming Specification

これならうまくいけるかも。
期待しつつテストプログラムの書き込みと読み出しのテストを行ないます。
WRITE/READプログラムはPIC16F1503などと同じでいけるはずですからTYPE=3を指定しました。
テストプログラムのHEXファイル16F1455TEST.HEXをロードしました。
>/pictype=3
pictype=33
[03][00][00][00]
>/hload 16f1455test.hex
loading 16f1455test.hex ...
i=225,binbfend=92
>

/PICWRを実行し続いて/VERIFYを実行しました。
途中を省略しています。
>/picwr
400E[03][00][00][00]
i=6,b=2,[04]0000
[05][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(03)(00)(00)(00)(ED)(FF)(50)(00)(FF)(03)(A2)(88)(38)(00)(4A)(A4)
i=12,b=2,[00]0000
[05][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(02)(00)(00)(00)(00)(00)(02)(03)(A2)(88)(38)(00)(4A)(A4)
i=22,b=6,[00]000a
[05][00][06][00][0A][21][00][34][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(A2)(88)(38)(00)(4A)(A4)

i=88,b=2,[00]000e
[05][00][02][00][0E][E4][09][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(0E)(01)(01)(00)(3A)(03)(A2)(88)(38)(00)(4A)(A4)
picwrend

>/verify
inbfend=0
400E[03][00][02][00]
i=6,b=2,[04]0000
[06][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(03)(00)(02)(00)(0E)(01)(01)(00)(3A)(03)(A2)(88)(38)(00)(4A)(A4)
i=12,b=2,[00]0000
[06][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(05)(28)(02)(00)(0E)(01)(01)(00)(3A)(03)(A2)(88)(38)(00)(4A)(A4)
[o][o]
i=22,b=6,[00]000a
[06][00][06][00][0A][21][00][34][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(06)(21)(00)(34)(30)(99)(00)(01)(00)(3A)(03)(A2)(88)(38)(00)(4A)(A4)
[o][o][o][o][o][o]

i=88,b=2,[00]000e
[06][00][02][00][0E][E4][09][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(09)(FF)(3F)(DA)(3C)(CF)(19)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

error=0
ベリファイOKです!

最後に/READFで読み出したデータ(プログラム)をHEXファイルとして保存しました。
>/picrdf 16f1455test250606.hex
400E[E4][09][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][21][00][34][30][99][00]
0010[10][8E][01][23][00][8E][01][20][00][14][20][14][20][14][20][14][20]
0020[10][21][08][8E][00][A1][0A][0C][28][19][20][19][20][19][20][19][20]
0030[10][08][00][00][00][A0][0B][19][28][08][00][FF][3F][FF][3F][FF][3F]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[E4][09][FF][3F]
[10]
>/exit

まだ/ERASEのテストはしていませんがそれは最後のテストです。
多分うまく書き込めたと思いますが念のために動作テストを行ないました。
乾電池2本を直列し+3Vで起動させました。

この写真ではわかりませんが実際にはLEDが点滅しています。
こちらはRC0の出力をオシロで観測した写真です。

RC0は約16msでH、L出力を繰り返しています。
プログラムの通りの動作です([第296回]参照)。

超ローコストPICWRITERの製作[第299回]
2025.6.10 upload

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