PIC16F1455でPICAXE用のUSBシリアルコンバータを作る

秋月などで発売が開始されたPIC用のBASICチップのPICAXEは、元々が教材用として開発されたということもあり興味があったのだが、先日入手することができた(地方に住んでいると送料がかかるのでパーツの入手のタイミングが遅れる)ので試してみることにした。

このPICAXE、チップ自体の値段は大して高くなく、元となるPICプラスアルファ程度で買えることが魅力である。しかし、プログラムの書き込みなどにはシリアルケーブルが必要だということで、USBのケーブルは結構いい値段がする。エアーバリアブルさんもそこら辺を考えてかいろいろ策を講じているようであるので、私も以前紹介したUSBが扱えるPICであるPIC16F1455を使って、このシリアルコンバータを作ってみることにした。

まず、PICAXEは元々がRS-232C経由での利用だったためシリアル信号が反転している。ということで、以前のプログラムを改造してみようとすると・・・・

Txは反転できるが、Rxは反転できない!!

なんということか、PICのシリアルモジュールにあるべき反転機構がTxにしか備わっていない!何故だ?なんでそんな中途半端なことをするマイクロチップ!!(ちなみにPIC18系にはRxにも反転機能がある) 今更PIC18F14K50になんて帰れない!

仕方がないのでトランジスタ1個追加して反転回路を入れることにして、できたのが次の回路図。

1455serial_picaxe

必要最低限かつ安価なパーツで作ることが目標なので、このまま製品化するなんてことは考えないように!

次にUSBコンバータのソフトを作る。前回のプログラムのシリアル初期化部分にTx反転レジスタのセットを追加するだけ~!ちょー簡単!

main.cのInitializeUSART()内の前半がPIC18系とPIC16系の初期化部分なので、その中のBAUDCONの設定のあとにSCKPをセットする命令を追加する。SCKPはBAUDCONのbit4なのでBAUDCONを0x18とセットしてもOK。

BAUDCON = 0x08;         // BRG16 = 1

SCKP=1;                    // Txの論理反転

んでもってコンパイルして1455に書き込んで、PICAXEのプログラミングエディタを起動していざテスト!

ん?チップを認識しない!!何故だーー

まぁこういうときは焦らずTeraTermなどのシリアル通信ソフトでやりとりを確認してみる。一応PICAXEに何かをおくると何かが返ってきていることはわかった。

次にPICAXEプログラミングエディタのオプションのシリアルポートのShow Port Help Toolsのチェックを入れてTest Portをやってみる。で、右の緑のLEDみたいなのをクリックして電圧が出るかどうか確かめろと・・・出てない・・・出てないということはこういうことらしい↓

-the USB adapter is not suitable (does not support the RS232 ‘break’ command)

このUSBアダプタは使えないだって??しかし、BREAK信号をサポートする必要があるらしいことがここでわかった。BREAK信号なんて20年以上お目にかかっていないような気がするが・・・ってゆうかマイクロチップのデモはBREAK信号を処理していないらしいことがわかった。わかったのなら作るしかない!

いつ作るの?今でしょ!!

仕方がないので、またまたマイクロチップのライブラリを捜索する。BREAK信号を扱っているところをusb_function_cdc.cに発見!USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D2をどっかで生かせば処理されるらしいことがわかる。さっそくusb_config.hにあるコメントを外して、いざビルド!!

エラーが出る!!UART_SEND_BREAK()関数が無いってよ!

ファイルをgrepしまくって捜索するがこの関数どこにも無い!どういうことだ!!実装されていない!しっかりしろマイクロチップ!仕方が無いので自分で作ることに・・・・。

いざ作るとなるといろいろ面倒くさく、マイクロチップの提供しているライブラリまで手をつけることに・・・。変更点をここで示すのが大変な領域に突入してしまったので、できあがったHEXファイルをアップするにとどめておく。

ということで、いつもの通り拡張子がdocになっているのでhexにしてからチップに書き込んでいただきたい。

PICAXE1455CDC(DL時に拡張子をhexに変更してください)

んでもってLEDチカチカさせている様子がこれ。ブレッドボードでも簡単に使えるのがいい。

2013-06-11 15-03-11.271

ちなみに、もともとのPICAXE用のコンバータはステレオミニジャックで実装されているようなので、互換品を作るとすれば回路図は次のようになる。

1455serial_picaxe2

保護用の抵抗器が数個追加されているが、原理は一緒。回路図ではジャックになっているが、100均などのケーブルを使ってプラグにしてもいいと思う。PIC16F1455の入手できるところが国内ではあまりない(ここくらいしか見つけられなかった。1個150円也)のが難点だが、部品代300円以内で作れそうなので、それはそれで価値があると思っている。

    • 近藤です
    • 2013年 11月 3日

    こんにちわ。
    USBシリアル変換で検索し、こちらのブログにたどり着きました。
    私も1455で同様の通信をやってみたいと思っております。
    公開されているのはhexファイルのみですので、もしも可能でしたら、C言語ファイル、ヘッダーファイル、更に可能でしたらプロジェクトファイルの公開をお願いできないでしょうか?IDE ver.8.92とXC8でプログラムしております。
    該当1455の参考資料が少なく、宜しくお願いします。

  1. 2016年 7月 7日

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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