Pico Basic用PICシリアルコンバータ(リセット機能追加)

Pico BasicのシリアルコンバータにPIC18F14K50を使っているのだが、プログラムを実行して、直して転送するたびにリセットSWを押すのはちょっと面倒だなと思い、シリアルI/FのDTRを使ってリセットさせようとTeraTermのマクロも作っていざ・・・ん?DTR出てる?PICのソースからDTRはRB6に割り当てられているらしいことはわかってたので、テスタで調べてみたが・・・ん?浮いてる?DTR信号が出ていないだけでなく、出力にさえなってない!!なんということだ。

”HardwareProfile – Low Pin Count USB Development Kit.h”に定義されているUART_DTRを手がかりにgrepしまくった結果、わかったことは以下の通り

1.usb_function_cdc.cのUSBCheckCDCRequest()でDTRの制御をしている。

2.上記1の処理をするためにはUSB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1が定義されている必要がある。

3.上記2の定義はusb_config.hで正しく定義されている。

4.上記1のDTR制御の処理はusb_function_cdc.hで定義されたマクロが使われる

5.上記4のマクロはUSB_CDC_SUPPORT_HARDWARE_FLOW_CONTROLが定義されていないと有効にならない

6.上記5のマクロUSB_CDC_SUPPORT_HARDWARE_FLOW_CONTROLはusb_config.hで正しく定義されている。っと思ったらコメントアウトされている!!

7.上記6のコメントを外してマクロを有効にしても、そもそもRB6を出力に設定する箇所が見当たらないw

以上のことからDTRを生かすために必要なことは、

・usb_config.hのコメントアウトされているUSB_CDC_SUPPORT_HARDWARE_FLOW_CONTROLの定義を有効にする

・どこかの初期化部でRB6を出力に設定する。具体的にはUART_TRISDTR=0;の記述をどこかに入れる

この2点がとりあえず必要であるみたいだ。ということで、実験してみよう!

1.usb_config.hのコメントをはずしてUSB_CDC_SUPPORT_HARDWARE_FLOW_CONTROLの定義を有効にする

2.main.cのInitializeUSART()の最後に以下の処理を追加

#if defined(USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL)
UART_RTS=0;
UART_TRISRTS=0;
UART_DTR=0;
UART_TRISDTR=0;
#endif

3.usb_function_cdc.cの#include “HardwareProfile.h”についているコメントをはずす

4.makeしてできあがったHEXファイルをチップへ書き込む

5.TeraTermマクロファイルをつくる。たとえばReset.ttlのようなファイル名を付けて

; DTR off
setdtr 0
mpause 100
; DTR on
setdtr 1
としておくと、マクロ実行でPicoBasicのリセットができる。キーボード設定ファイルを書き換えておくとさらに便利!

TeraTermのキーボード設定ファイルKEYBOARD.CNFの最後に次のような記述を入れればBASICのようにCTRL+Cで実行を止められる。

[User keys]
;Ctrl+C Reset
User1=1070,2,Reset.ttl

ちなみにPIC18F14K50からのリセット信号の接続には下図のようにちゃんと抵抗を入れておくこと。

シリアルコンバータのHexファイルは次のとおり。マイクロチップの純正HIDブートローダと同居ができるのは以前のものと同様です。自己責任で!

SConv2.hex(例によって.docになっているので.HEXに変えてダウンロードして下さい)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。