VR-150用メモリー編集ソフト X150 & USBインターフェースの製作

製作:2017年5月29日~2017年6月11日
執筆 2017年6月24日
1.07アップデート 2018年11月7日
x150  tk150に取って代わるWindows向けの高機能メモリー編集ソフトと、USBで接続するの通信用インターフェース回路を作りました。

概要

比較画像  最近神戸空港でイベントがあったのですが、うっかりVR-150のメモリーを初期化したまま持参してしまい、せっかくのチャンスを台無しにしてしまいました。 自宅に帰ってからメモリーを書き戻したのですが、最近のPCはシリアルポートが無いため古いPCを引っ張り出してきたり、tk150の通信エラーに悩まされたりと結構面倒な作業でした。
 いつまでもこのまま使うわけにはいかないのですが、tk150を書いているTcl/Tkは最近全く触っていないためプログラムがよく解りません。 前作の液晶モニタを作った時にシリアル通信周りをさわっていたこともあり、VB.NETで作ってやろうと思ったことが発端です。
 また、RS-232Cのポートも現在のPCでは装備されていることがほとんどありませんので、USB経由で通信するインターフェースも新たに作り直しました。 最近は変換ICをモジュール化した便利な基板が出回っているので、これを使って手っ取り早く作ることができます。 信号レベルもRS-232Cの±12Vのような使いにくいものではなく、5Vや3.3Vレベルになっていることも都合がよく、部品点数を減らすことができます。

X150の入手方法

X150 Ver.1.07をダウンロード (61kB) README

動作環境

インターフェース

インストール・アンインストール

X150の使い方

comselect  ソフトを起動するとインターフェースの通信ポートを聞いてくるので、VR-150と接続しているシリアルポートを選択してください。

 初期画面ではtk150の使い方と同じように、編集の元となるメモリーイメージを読み込むか、VR-150からデータをダウンロードするか選択できます。 押してくださいと言わんばかりのボタンが2個並んでいるので、どちらかを選んでください。 データファイルを直接ドロップしたり、コマンドライン引数で指定してもイメージファイルを開くことができます。 メモリーイメージはtk150と完全互換なので、データをストックしている方はそのまま読み込むことができます。

 各種編集画面は上部のタブで選択できます。初めの画面はメモリーチャンネルエディタです。 表形式で直接データが編集できるので、いちいちエクスポートしてExcelで編集する手間がありません。 範囲を選択してショートカットキーでコピー、カット、ペースト、削除ができます。ソート機能は無いので、ファイルメニューからCSVでエクスポートしてExcelで編集してください。 tk150ではメモリーチャンネルに保存した周波数の末尾750Hzが正しく認識しなかったり、トーンスケルチモードをBELLにするとスケルチが外れてしまいましたが、そういった問題は修正しています。

 VFOモードの設定です。 tk150と比較して、トーンスケルチ周波数、サーチバンドメモリーのバンク、スキップメモリ使用のON/OFFが選べるようになりました。 tk150の日本語パッチを作った時にスキップメモリーのモードは実際のスキップに使われないので「省略する」としていましたが、 メモリーの確認で呼び出すときにモードが反映されていたため、再び表示するようにしています。 サーチバンドメモリーの下限・上限の周波数に対するモードは、実際には使用されないため表示を省いています。

 デュアル・プライオリティモードとVFOのスマートサーチ機能です。 設定できる内容はtk150と同じですが、スマートサーチが動作しない条件をチェックして警告を出すようにしてあります。

スマートサーチが動作しない条件

 12個のバンドの割り当てと、使いどころがよく解らないプリセットメモリーの設定です。 バンド表示周波数と上限周波数は必ず昇順に並べないといけないため、おかしな数値を入れるとエラーを出すようにしてあります。 プリセット12用のメモリーグループ指定もできるように項目を追加しておきました。

 その他のセットモードとオートステップ・オートモードの定義表です。 オートステップの周波数割り当ては総務省で決められているため、これ以外のステップで電波が出ている可能性は低く、あえて変更する必要は無いでしょう。 必要な時に手動のSTEPで受信すれば良いと思います。

csv  CSVファイルのフィールド定義です。tk150のCSVフォーマットとは異なりますので、適宜Excel等で変換してください。 CSVでインポートする時の処理ルールを以下に示します。

  1. 空白行と#から始まる行はコメントとしてスキップされます。
  2. 項目の""での囲みはあっても無くても構いません。
  3. 項目の並びは右の表の通りです。
  4. 必須項目はチャンネルのみです。
  5. チャンネルが歯抜けになっている場合は、インポート前のメモリチャンネルは変化しません。
  6. CSVファイル内でチャンネルが重複している場合は、後の行が優先順位が高くなります。
  7. チャンネルのみ記載、または、周波数が0のチャンネルは、既存のメモリチャンネルが削除されます。
  8. 周波数は0.1~1299.995のMHz記載で最小単位は250Hzです。それ以下の周波数は切り捨てされます。
  9. モードが省略されている場合は、AUTOに設定されます。
  10. 名前が省略されている場合は周波数が表示されます。また、6文字以上入力されていたら切り捨てられ、表示できない文字の場合はスペースになります。
  11. PMSは空白ならばOFF、何か文字が入って入ればONです。
  12. トーンスケルチが省略されていればOFF、入力可能値はOFF ON BEEPです。
  13. トーン周波数が省略されていれば、スケルチがOFFならば67.0、ONかBEEPならば88.5に設定されます。
    ※トーン周波数に設定可能な値はマニュアルをご覧ください。
  14. トーン周波数より右にある項目は無視されます。
  15. CSVファイルのインポートに失敗した場合は、それまでのインポート可能な行だけが処理され、エラーメッセージに該当の行の内容が表示されます。

USBインターフェースの製作

回路図  VR-150のクローンケーブルインターフェースは、イヤホン端子のステレオの右チャンネルを利用して半二重で通信するようになっています。 これはちょうどI2Cとよく似ており、いわゆるワイヤードORで接続されていることになります。 VR-150はアイドル状態で電源電圧と同じ3V程度が出力されていて、信号があるときだけL=0V、H=Vccが出力されます。
 さて、秋月や共立で販売されているFT232系のUSB変換インターフェースは、Vccや信号レベルを5.0Vと3.3Vで切り替えることができるので、 これを3.3Vに設定してそのままVR-150に突っ込んでやれば簡単に通信ができるというわけです。

くれぐれも言います。3.3Vモードですよ。5Vはダメ!ゼッタイ!

※VR-150の電源電圧は最大3.5Vですので、クローン信号に3.3Vを加えるのは問題ないと思っています。 仮に本体が壊れたとしても私は責任を持ちませんので、自己責任でご利用ください。

基板の実装

基板レイアウト
基板レイアウト
基板レイアウト
 基板レイアウトは二階建て方式です。 まず、ジャンパー1本と小型トランジスタを倒した状態でハンダ付けし、USBの変換基板はスペーサーでかさ上げをしてハンダ付けします。 トランジスタは手元にあった2SC5485を使っていますが、2SC2603のような汎用品で大丈夫です。 裏面には別の工作で余ったチップ抵抗を使って結構適当なハンダ付けをしていきます。 手前にある2ピンのコネクタはこの先にもう一台のVR-150をつないでクローンの通信を解析するために付けたもので、通常は必要ありません。
 USB変換基板は、SparkfunのBOB-00718、BOB-12731、DEV-09873あたりがオススメです。 3.3Vより5Vの方が安いはずなので、ハンダブリッジで変更できる安価な5Vタイプを買って自分で3.3Vに切り替えると良いでしょう。 そのほか、サンハヤトのMM-FT232、秋月のAE-TTL-232R、共立のUSB921-2303-15SUに至っては300円です。

通信テスト

エラー表示  インターフェースが出来上がったら早速テストです。 今回作ったインターフェースはWindowsからはシリアルポートとして認識しているのでtk150でも使うことができますが、 tk150では昔から表示されていた謎のエラーは依然として解決しません。
 日本語化パッチを作った時は「謎のノイズ」と表現していましたが、X150を作っている過程でノイズではなくNAK(否定)パケットであることが分かりました。 つまり、意味のあるデータを送っているので、tk150では回避ができないという事になってしまいます。

※ 原因解説 ※
 PCからVR-150に送信したデータはVR-150に届きますが、ワイヤードORになっているため同時にPCの受信側にもそのまま戻ってきます。 そのため、VR-150に送信したデータと同じバイト数だけ毎回空読みする必要があるのですが、謎のデータが入ってくると送信バイト数と受信バイト数が異なるため、 結果的に同期が取れなくなってエラーになってしまうという事でした。 そう言った経緯でX150ではNAKを含めたパケットの種類判定を行い、ゴミはゴミとみなして自動的に除去するようにしています。

使ってみて分かったこと・製作過程で苦労した点