あやの
NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 借りている容量が最大に達しましたので、移転します。 ★移転先:http://maison-dcc.sblo.jp/
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
【今日も難しい話です】
SmileWriter5in1を使って、PIC12F1822用のPICライターを作ろうと試行錯誤しています。
先日までの調査した結果から、プログラムを変更していきます。
1、Extended segment addressに対応させました。
従来のプログラムは RECTYPE=04 を無視していたので、処理を追加しました。
とりあえず何も考えずに、myRightという関数作って右から4文字を表示する様に変更。
3、ProgramPICスケッチ側
pic12F1822のdeviceInfoを確定させました。
EEPROMのアドレスの件は、
KO-IBO project blogさんの、Pic12F1822のデータEEPROMに書き込むのは
を参考にしました。
結局PIC12F1822のEEP-ROM領域は0xF000〜です。
完成〜!!!
Erase → Write とボタンを押すと、Program,Config,EEP-ROMが正常に書き込めました。
あとは電車に実装して、動作確認です。
でも、手頃な電車が無いな〜
ちなみに、書き込み電圧は12Vのままです。
これで、PIC12F683とPIC12F1822用のPICライタ部が完成したので、当初考えていた機能が
全部実装できました。パチパチ。
PR
【今日も難しい話です】
SmileWriter5in1を使って、PIC12F1822用のPICライターを作ろうと試行錯誤しています。
ほぼ調べたメモ代わり状態ですw
HEX ファイル上のLOAD OFFSETが0008の時、PICのアドレスは4なのですね。
だから、ArdPicProgHostのソースでアドレスを取り込む部分で、
intDataAddress = Val("&H" + strSourceFileIntelHex.Substring(intFilePointer, 4)) >> 1
の様に「>>1」で右に1bitずらしていたのですね。
このint型への変換でValを使っていますが、これは負号付き16bitなので、
0xE000が来ると、16bit負号ありで10進数に変換されると、「-8192」になって、
おかしくなってしまうのですね。
int型から、Long型に変えて、
longDataAddress = Clng("&H" + strSourceFileIntelHex.Substring(intFilePointer, 4)) >> 1
10進数変換は、Clng()を使うと良さそう。
SmileWriter5in1を使って、PIC12F1822用のPICライターを作ろうと試行錯誤しています。
ほぼ調べたメモ代わり状態ですw
HEX ファイル上のLOAD OFFSETが0008の時、PICのアドレスは4なのですね。
だから、ArdPicProgHostのソースでアドレスを取り込む部分で、
intDataAddress = Val("&H" + strSourceFileIntelHex.Substring(intFilePointer, 4)) >> 1
の様に「>>1」で右に1bitずらしていたのですね。
このint型への変換でValを使っていますが、これは負号付き16bitなので、
0xE000が来ると、16bit負号ありで10進数に変換されると、「-8192」になって、
おかしくなってしまうのですね。
int型から、Long型に変えて、
longDataAddress = Clng("&H" + strSourceFileIntelHex.Substring(intFilePointer, 4)) >> 1
10進数変換は、Clng()を使うと良さそう。
あとは、 RECTYPE = 02 の時の、拡張セグメントアドレスレコードの演算部分を追加して
あげればPIC12F1822の対応ができそう。
!!!
えーPIC12F1822の,VIHHって、Min8.0V 〜 Max9.0Vなんですか!
詰みました。
PIC12F683は12Vで良いのに、電圧変えないといけないのかぁ・・・
【今日も難しい話ですw】
SmileWriter5in1で、PIC12F1822ライタが作れないかなの調査です。
PIC HEXファイルを分析していたところ、先日赤枠で囲ったところは、実はConfiguration Wordの
値でした。
MPLAB IPE をMacにインストールして、HEXファイルを覗いてメモリマップを確認したのと、
HEXファイルを分析してわかりました(^^;
レコードタイプが04だと拡張リニアアドレスという事なので、アドレスを算出するには、
32bitに拡張する計算が必要です。
((0x0001<<16) + 0x0000+0x0001) / 2 = 0x8000
0x0001 を左に16bitシフトして、LoadOffset(0x0000)を加算
Data(0x0001)を加算して、2で割ります。
というわけで、現状のHostProgramであるArduino Pic Programmerが
拡張張リニアアドレスレコードに対応していないんだなー。
この辺を調べましょう。
【追記】Ardiono Pic Programmerのソースファイルを眺めて・・・
'process extended segment address -> not required
そかー・・・・むむむむむ
SmileWriter5in1で、PIC12F1822ライタが作れないかなの調査です。
PIC HEXファイルを分析していたところ、先日赤枠で囲ったところは、実はConfiguration Wordの
値でした。
MPLAB IPE をMacにインストールして、HEXファイルを覗いてメモリマップを確認したのと、
HEXファイルを分析してわかりました(^^;
レコードタイプが04だと拡張リニアアドレスという事なので、アドレスを算出するには、
32bitに拡張する計算が必要です。
((0x0001<<16) + 0x0000+0x0001) / 2 = 0x8000
0x0001 を左に16bitシフトして、LoadOffset(0x0000)を加算
Data(0x0001)を加算して、2で割ります。
というわけで、現状のHostProgramであるArduino Pic Programmerが
拡張張リニアアドレスレコードに対応していないんだなー。
この辺を調べましょう。
【追記】Ardiono Pic Programmerのソースファイルを眺めて・・・
'process extended segment address -> not required
そかー・・・・むむむむむ
【今日は難しい話のブログですw】
SmileWriter5in1を使って、PIC12F1822用のPICライターを作ろうとしています。
自前で作る人って居ないようですね(^^;
ググっても、情報がありません;
腰を据えて作業するために、PIC12F1822 Memory Programming Specificationの
PDFファイルを紙に印刷しましたw
1、書き込み途中でエラーになってしまう原因調査
ぬっきーさん配布のHEXファイル構造でFLASHデータとEEPROMデータの間に
先頭アドレス付近に書き込むデータが設定されている(赤枠内)
ライタはファイルの先頭から順に書き込んでいるため、先頭付近を再度書き込めと
言われても、イレースしないと書き込めないので、エラーになっていました。
赤枠の3行を削除すると書き込めます。要調査ですね。
2、EEPROM領域のアドレスは?
PIC12F1822のデータシートには、0x1E000-0x1E1FFと書かれているけど、
HEXファイルは0xE000だし、
ぬっきーさんのソースは、
ちょっと謎です。要調査。
http://koibo.blog.fc2.com/blog-entry-34.html
3、書き込みツール修正
Windowsの書き込みツールはVB.NETで作られているのですが、EEPROMアドレス0xE000の
様に最上位bitがONになっているとうまく処理できていないところがありました。
例えば、16進数->10進数変換で val("&H" ・・・を使うと、整数では負極になったりします。
valからCLngに変更しました。
元々の >>1 が何のためにあるのやら。
調査継続です・・・
SmileWriter5in1を使って、PIC12F1822用のPICライターを作ろうとしています。
自前で作る人って居ないようですね(^^;
ググっても、情報がありません;
腰を据えて作業するために、PIC12F1822 Memory Programming Specificationの
PDFファイルを紙に印刷しましたw
1、書き込み途中でエラーになってしまう原因調査
ぬっきーさん配布のHEXファイル構造でFLASHデータとEEPROMデータの間に
先頭アドレス付近に書き込むデータが設定されている(赤枠内)
ライタはファイルの先頭から順に書き込んでいるため、先頭付近を再度書き込めと
言われても、イレースしないと書き込めないので、エラーになっていました。
赤枠の3行を削除すると書き込めます。要調査ですね。
2、EEPROM領域のアドレスは?
PIC12F1822のデータシートには、0x1E000-0x1E1FFと書かれているけど、
HEXファイルは0xE000だし、
ぬっきーさんのソースは、
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;; CV初期値の設定(EEPROMへのデータ定義) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0xF000 ; ;----- 初期データ -------- CV値 ----------------------なので、0xF000となっている。
ちょっと謎です。要調査。
http://koibo.blog.fc2.com/blog-entry-34.html
3、書き込みツール修正
Windowsの書き込みツールはVB.NETで作られているのですが、EEPROMアドレス0xE000の
様に最上位bitがONになっているとうまく処理できていないところがありました。
例えば、16進数->10進数変換で val("&H" ・・・を使うと、整数では負極になったりします。
valからCLngに変更しました。
元々の >>1 が何のためにあるのやら。
調査継続です・・・
今日は、E714-1 をDCC化しました。
作業も慣れたもので、サクッと完成。
詳細はそのうちWebページの方にまとめます。
DCCから、ヘッドライト・テールライト・車掌室・室内灯の制御ができます。
中はこんな感じです。
Smile Function Decoderにはキープアライブコンデンサ 100uFを
付けました。
モーター車用スケッチで、速度0でもパンタLEDが薄く光っていたバグを修正
前回作った先頭車両が集電不良があったので、分解して再組み立てしました。
楕円レイアウトを走らせてみましたが、いい感です!
作業も慣れたもので、サクッと完成。
詳細はそのうちWebページの方にまとめます。
DCCから、ヘッドライト・テールライト・車掌室・室内灯の制御ができます。
中はこんな感じです。
Smile Function Decoderにはキープアライブコンデンサ 100uFを
付けました。
モーター車用スケッチで、速度0でもパンタLEDが薄く光っていたバグを修正
前回作った先頭車両が集電不良があったので、分解して再組み立てしました。
楕円レイアウトを走らせてみましたが、いい感です!
ブログ内検索
カテゴリー
最新記事
(12/31)
(12/31)
(12/29)
(12/23)
(12/18)
リンク
プロフィール
HN:
あやのすけ
性別:
非公開

