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


超ローコストPICWRITERの製作

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

[第244回]



●PIC16F88(2)CHIP ERASE

PIC16F88は今年の1月にWRITERプログラムを作成してテストもしていました。
そのときにテストに使ったPIC16F88がそのまま残っていましたのでまずはそれをPIC16F84AWRITERプログラムで読み出してみました。
logfile piciolog\0328081552.txt open
*** pic i/o ***
picio-30 connected
>/picrd 16f88test1c250328.hex
400C[68][07][F8][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][83][16][12][28][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][6C][30][1A][28][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][8F][00][00][30][86][00][85][00][9B][00][03][10]
0040[10][86][01][06][08][01][3A][86][00][21][28][FF][3F][FF][3F][FF][3F]
0050[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[F8][3F]
[10]
>

/PICRDはうまく機能したようです。
次に/ERASEをテストしてみました。
>/erase
400C[68][07][F8][3F]
>/picrd
400C[68][07][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][83][16][12][28][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][6C][30][1A][28][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][8F][00][00][30][86][00][85][00][9B][00][03][10]
0040[10][86][01][06][08][01][3A][86][00][21][28][FF][3F][FF][3F][FF][3F]

これは駄目でした。
/ERASEのあと/PICRDを実行して読み出してみましたが全く消えていません。
これまで試したPIC16F84やPIC16F627とは消去プログラムがかなり違っています。
PIC16F88の場合にもERASEコマンドはありますが、コピープロテクトも含めて消去するにはCHIP ERASEコマンドを使うことになります。
今まで作って試してきたPIC WRITERプログラムの消去プログラムはかなり面倒なプログラムでしたがPIC16F88の場合はCHIP ERASEコマンドを使うだけのシンプルなもののようです。
そこでPIC16F84AWRITERプログラムのうち/ERASEのところだけをCHIP ERASEコマンドに置き換えてそれをPIC16F88用のWRITERプログラムとしました。
そのプログラムをPIC18F13K50に書いてもう一度さきほどのPIC16F88に対して消去テストを行ないました。
logfile piciolog\0328173638.txt open
*** pic i/o ***
picio-30 connected
>/erase
400C[68][07][FF][3F]
>/picrd
400C[68][07][FF][3F]
type=04,uadrs=00
[08]
0000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0050[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[FF][3F]
[10]
>

今度はうまく消去できました。
/PICRDと/ERASEのテストができましたので次は/PICWRのテストです。
下はPIC16F88のテストプログラムです。
;;;PIC 16F88  testprogram
;09/12/31
;25/1/17
;clock=4MHz
        #include <p16f88.inc>
;
;Program Configuration Register 1
        __CONFIG _CONFIG1,_WDT_OFF & _INTRC_IO
;
     org 00
     goto start
;
     org 05
start
    bsf STATUS,5 ;bank 1
        goto jp1
;
        org 12
jp1
        movlw 6c;=4MHz
        goto jp2
;
        org 1a
jp2
        movwf OSCCON
    movlw 0;port=out
    movwf TRISB
        movwf TRISA
        movwf ANSEL;porta=digital
        bcf STATUS,0;bank 0
        clrf PORTB
loop
        movf PORTB,w
        xorlw 01
        movwf PORTB
        goto loop        
;
     end
;

[2025.3.30注記]このプログラムにバグがみつかりました([第246回]参照)
これはPICアセンブラのソースプログラムです。
これをMPLABでアセンブルしてHEXファイル16F88TEST1C.ASMを作成しました。
それを/HLOADコマンドで読み込んで/PICWRを実行しました。
実行後に/VERIFYを実行したのですが…。
>/hload 16f88test1c.hex
loading 16f88test1c.hex ...
i=172,binbfend=68
>/picwr
400C[68][07][FF][3F]
*******picwrend

>/verify
inbfend=0
400C[68][07][FF][3F]
(01)(68)(07)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
(02)(05)(28)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
(04)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(04)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(0C)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(0A)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(10)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
vfend
error=31
>

全く書き込みできませんでした。
/PICWRもプログラムを直さなければならないようです。

超ローコストPICWRITERの製作[第244回]
2025.3.28 upload

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