超ローコストPICWRITERの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第305回]
●PIC16F1705
このところいくつか14pinのPICについて書いてきました。
今回のPIC16F1705も14pinです。
[出典]Microchip Technology Inc. PIC16F1705 Data Sheet
pin配列はPIC16F1825などと同じです。
pin数こそ14pinと少ないですが機能としては結構いろいろ盛り沢山です。
[出典]Microchip Technology Inc. PIC16F1705 Data Sheet
Documentの発行年は2013−2015になっています。
PICとしては結構新しいデバイスです。
こ。
これはひょっとしてやばいかも。
[出典]Microchip Technology Inc. PIC16F1705 Data Sheet
近年のPICでは基本的に同じ機能だけれどもpin数やメモリなどが違うというデバイスをファミリーとしていくつか出すケースが増えています。
PIC16F1703〜1705、1707〜1709がひとつのファミリーのようです。
それはそれでよいのですけれど。
上で「やばい」と書きましたのは。
新しいデバイスが増えてくると私が今までずっと使ってきていますPICの開発ツールでは対象外になってしまうものが増えてくるのでは、という当然過ぎる恐れです。
私の場合PICアセンブラとしてはMPLABをずっと使ってきています。
MPLABv8.92が最終バージョンです。
MPLABでPICアセンブラを使う場合そのPIC用のインクルードファイルが必要です。
ところが。
えー。
PIC16F1705.incがない!
裏技を使うならともかくとして正攻法ではPIC16F1705のASMプログラムはアセンブルできません。
えらいこっちゃあ。
PICKITUもえらいこってす。
PIC16F1705を認識してくれません。
のみならず。
DEVICE IDがちょっと違うんじゃないの?
[出典]Microchip Technology Inc. PIC16F170X Memory Programming Specification
PIC16F1705のDevice IDは3055です。
微妙に違っていますねえ。
MPLABは進化して現在はMPLAB Xつうのになっているようです。
一応はダウンロードして使ってみようとしたのですけれど。
こんなものは使う気になりません。
そもそも私のWindows7マシンでは重くてほぼ使い物になりません。
PICKITのほうも今ではPICKIT4なのだそうですが。
正規版だと2万円もします。
ひえええ。
たまに数百円のPICを書くだけなのに2万円はちょっと出せませぬ。
なんですか。
PICKIT3Xのまがいものがきょうさん某国のサイトに出回っているようですけれど。
色々怨嗟の声も出回っているようで。
うむむむむむ。
こうなってくるとPICWRITERだけではなくてPICアセンブラも自作しなくてはなりませぬ。
えらいこっちゃあ。
えっと。
そんな与太は置いときまして。
とりあえずPIC16F1705をなんとかやっつけなくてはいけません。
ちょいと確認してみましたらPIC16F1705も前回のPIC16F1825と同じWRITERプログラムでいけそうです。
PICTYPE=3です。
同じ14pinでpin配列も同じですからとりあえずPIC16F1825用のHEXプログラムを使ってPIC16F1705に対してWRITERプログラムのテストをしてみることにしました。
まずは/HLOADコマンドで16F1825TEST.HEXをロードして/PICWRを実行した後/VERIFYを実行しました。
logfile piciolog\0616214005.txt open *** pic i/o *** picio-30 connected >/picidck 400C[55][30] >/pictype=3 pictype=33 [03][41][00][01] >/hload 16f1825test.hex loading 16f1825test.hex ... i=242,binbfend=98 >/picwr 400E[03][41][00][01] 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)(41)(00)(01)(66)(D7)(2C)(84)(FF)(03)(60)(10)(84)(00)(08)(E4) 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)(60)(10)(84)(00)(08)(E4) i=22,b=6,[00]000a [05][00][06][00][0A][21][00][6F][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(60)(10)(84)(00)(08)(E4) 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)(60)(10)(84)(00)(08)(E4) i=94,b=2,[00]0010 [05][00][02][00][10][FF][3E][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(03)(00)(02)(00)(10)(01)(01)(00)(3A)(03)(60)(10)(84)(00)(08)(E4) picwr end >/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)(10)(01)(01)(00)(3A)(03)(60)(10)(84)(00)(08)(E4) 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)(10)(01)(01)(00)(3A)(03)(60)(10)(84)(00)(08)(E4) [o][o] i=22,b=6,[00]000a [06][00][06][00][0A][21][00][6F][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (06)(21)(00)(24)(30)(99)(00)(01)(00)(3A)(03)(60)(10)(84)(00)(08)(E4) [o][o][x][o][o][o]error! 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)(3E)(7E)(31)(27)(1A)(7D)(3E)(77)(37)(FF)(3F)(FF)(3F) [o][o] i=94,b=2,[00]0010 [06][00][02][00][10][FF][3E][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(FF)(3E)(7E)(31)(27)(1A)(7D)(3E)(77)(37)(FF)(3F)(FF)(3F)(77)(3A) [o][o] vfend error=1 >/picrdf 16f1705t.hex 400E[FF][3E][7E][31] type=04,uadrs=00 [08] 0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][21][00][24][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] 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[E4][09][FF][3E] [10] >/exit |
DEVICE IDは3055です。
そこはよいのですけれど。
あれ?
ベリファイでerror=1が表示されてしまいました。
前の方のアドレス000Aの行のところでもとのデータは[21][00][6F][30]なのですがそこが(21)(00)(24)(30)になっています。
その後で実行した/PICRDFでも最初の行で[21][00][24][30]になっています。
そこはどういう命令コードなのか、アセンブル時のリストで確認してみました。
MPASM 5.51 16F1825TEST.ASM 6-16-2025 10:39:06 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;;;PIC 16F1825 testprogram from 1455testb 00002 ;25.6.13 6.16 00003 ; Message[303]: Program word too large. Truncated to core size. (C9E4) 8007 09E4 00004 __CONFIG _CONFIG1, _WDTE_OFF & _FOSC_INTOSC & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF Message[303]: Program word too large. Truncated to core size. (FEFF) 8008 3EFF 00005 __CONFIG _CONFIG2, _PLLEN_OFF 00006 ; 00007 #include<p16f1825.inc> 00001 LIST 00002 00003 ;========================================================================== 00004 ; MPASM PIC16F1825 processor include 00005 ; 00006 ; (c) Copyright 1999-2013 Microchip Technology, All rights reserved 00007 ;========================================================================== 00008 Message[301]: MESSAGE: (Processor-header file mismatch. Verify selected processor.) 01216 LIST 00008 ; 00000020 00009 cntr0=20 00000021 00010 cntr1=21 00011 ; 0000 00012 org 00 0000 2805 00013 goto start 00014 ; 0005 00015 org 05 0005 00016 start 0005 0021 00017 banksel OSCCON;bank 1 0006 306F 00018 movlw 6f;=4MHz Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 0099 00019 movwf OSCCON |
[30][6F]はmovlw 6fですねえ。
ごく普通の命令です。
こんなところでerrorが出ることは普通はありません。
ひょっとするとWRITERプログラム実行時の書き込みエラーなのかもしれません。
念のため再度同じことを実行してみました。
既に書き込み済みですので最初に/ERASEを実行した後で上で実行したのと同じことを実行しました。
logfile piciolog\0616215420.txt open *** pic i/o *** picio-30 connected >/pictype=3 pictype=33 [03][01][00][00] >/erase 400E[03][01][00][00] >/hload 16f1825test.hex loading 16f1825test.hex ... i=242,binbfend=98 >/picwr 400E[03][01][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)(01)(00)(00)(0E)(01)(01)(00)(00)(03)(FF)(3F)(FF)(3F)(FF)(3F) 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)(FF)(3F)(FF)(3F)(FF)(3F) i=22,b=6,[00]000a [05][00][06][00][0A][21][00][6F][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(FF)(3F)(FF)(3F)(FF)(3F) 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)(FF)(3F)(FF)(3F)(FF)(3F) i=94,b=2,[00]0010 [05][00][02][00][10][FF][3E][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(03)(00)(02)(00)(10)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F) picwr end >/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)(10)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F) 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)(10)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F) [o][o] i=22,b=6,[00]000a [06][00][06][00][0A][21][00][6F][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (06)(21)(00)(6F)(30)(99)(00)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F) [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)(3E)(7E)(31)(27)(1A)(7D)(3E)(77)(37)(FF)(3F)(FF)(3F) [o][o] i=94,b=2,[00]0010 [06][00][02][00][10][FF][3E][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(FF)(3E)(7E)(31)(27)(1A)(7D)(3E)(77)(37)(FF)(3F)(FF)(3F)(77)(3A) [o][o] vfend error=0 >/picrdf 16f1705t2.hex 400E[FF][3E][7E][31] type=04,uadrs=00 [08] 0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][21][00][6F][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] 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[E4][09][FF][3E] [10] >/exit |
おお。
今度はerror=0になりました。
やっぱりたまたま書き込みエラーが発生したようです。
EEPROMの書き込みなどでもたまにエラーになることがあります。
消去した後再度書き込みをしてエラーにならなければ問題はありませんでしょう。
さて。
今回はPIC16F1705にPIC16F1825用のプログラムをWRITEしました。
ちょいと乱暴なやり方です。
書き込み/読み出しはうまくいったのですが果たして同じようにプログラムが走ってくれるでしょうか。
PIC16F1455、PIC16F1825のときと同じ動作テストをしてみました。
単三乾電池2本、+3Vでの動作テストです。
おお。
動きましたよ。
PIC16F1705のところを拡大しました。
もとの画像をそのまま拡大しましたからちょっとボケていますがなんとかPIC16F1705と読めます。
下はRC0の出力波形です。
約16msごとにH、Lを繰り返し出力しています。
今回はこの回だけですけれど。
これにて一件落着です。
超ローコストPICWRITERの製作[第305回]
2025.6.17 upload
前へ
次へ
ホームページトップへ戻る