概要
最近神戸空港でイベントがあったのですが、うっかりVR-150のメモリーを初期化したまま持参してしまい、せっかくのチャンスを台無しにしてしまいました。
自宅に帰ってからメモリーを書き戻したのですが、最近のPCはシリアルポートが無いため古いPCを引っ張り出してきたり、tk150の通信エラーに悩まされたりと結構面倒な作業でした。
いつまでもこのまま使うわけにはいかないのですが、tk150を書いているTcl/Tkは最近全く触っていないためプログラムがよく解りません。 前作の液晶モニタを作った時にシリアル通信周りをさわっていたこともあり、VB.NETで作ってやろうと思ったことが発端です。
また、RS-232Cのポートも現在のPCでは装備されていることがほとんどありませんので、USB経由で通信するインターフェースも新たに作り直しました。 最近は変換ICをモジュール化した便利な基板が出回っているので、これを使って手っ取り早く作ることができます。 信号レベルもRS-232Cの±12Vのような使いにくいものではなく、5Vや3.3Vレベルになっていることも都合がよく、部品点数を減らすことができます。
いつまでもこのまま使うわけにはいかないのですが、tk150を書いているTcl/Tkは最近全く触っていないためプログラムがよく解りません。 前作の液晶モニタを作った時にシリアル通信周りをさわっていたこともあり、VB.NETで作ってやろうと思ったことが発端です。
また、RS-232Cのポートも現在のPCでは装備されていることがほとんどありませんので、USB経由で通信するインターフェースも新たに作り直しました。 最近は変換ICをモジュール化した便利な基板が出回っているので、これを使って手っ取り早く作ることができます。 信号レベルもRS-232Cの±12Vのような使いにくいものではなく、5Vや3.3Vレベルになっていることも都合がよく、部品点数を減らすことができます。
X150の入手方法
X150 Ver.1.07をダウンロード (61kB)README
動作環境
- Windows 7 32bit/64bit 以降のx86系PC (非ARM)
- .NET Framework 4.5.2以降をインストールすること。(通常勝手に入ってます)
インターフェース
- シリアルポート または USB-シリアル変換アダプタ
- tk150に使えるVR-150用のインターフェース
- ADMS-5などのメーカー製インターフェースは手持ちが無いのでテストしていません。
インストール・アンインストール
- X150はインストール操作は必要ありません。zipの中のx150.exeを実行するだけでご使用いただけます。
- アンインストールはx150.exeを削除していただくだけで結構です。X150はユーザー設定情報を保存しません。レジストリにも手を加えません。
X150の使い方
ソフトを起動するとインターフェースの通信ポートを聞いてくるので、VR-150と接続しているシリアルポートを選択してください。
初期画面ではtk150の使い方と同じように、編集の元となるメモリーイメージを読み込むか、VR-150からデータをダウンロードするか選択できます。
押してくださいと言わんばかりのボタンが2個並んでいるので、どちらかを選んでください。
データファイルを直接ドロップしたり、コマンドライン引数で指定してもイメージファイルを開くことができます。
メモリーイメージはtk150と完全互換なので、データをストックしている方はそのまま読み込むことができます。
各種編集画面は上部のタブで選択できます。初めの画面はメモリーチャンネルエディタです。
表形式で直接データが編集できるので、いちいちエクスポートしてExcelで編集する手間がありません。
範囲を選択してショートカットキーでコピー、カット、ペースト、削除ができます。ソート機能は無いので、ファイルメニューからCSVでエクスポートしてExcelで編集してください。
tk150ではメモリーチャンネルに保存した周波数の末尾750Hzが正しく認識しなかったり、トーンスケルチモードをBELLにするとスケルチが外れてしまいましたが、そういった問題は修正しています。
VFOモードの設定です。
tk150と比較して、トーンスケルチ周波数、サーチバンドメモリーのバンク、スキップメモリ使用のON/OFFが選べるようになりました。
tk150の日本語パッチを作った時にスキップメモリーのモードは実際のスキップに使われないので「省略する」としていましたが、
メモリーの確認で呼び出すときにモードが反映されていたため、再び表示するようにしています。
サーチバンドメモリーの下限・上限の周波数に対するモードは、実際には使用されないため表示を省いています。
デュアル・プライオリティモードとVFOのスマートサーチ機能です。
設定できる内容はtk150と同じですが、スマートサーチが動作しない条件をチェックして警告を出すようにしてあります。
スマートサーチが動作しない条件
スマートサーチが動作しない条件
- 下限が上限より高い周波数の場合
- スタートが上限と下限の間に設定されていない場合
- スタートと上限、またはスタートと下限の間隔が100kHz以下の場合
12個のバンドの割り当てと、使いどころがよく解らないプリセットメモリーの設定です。
バンド表示周波数と上限周波数は必ず昇順に並べないといけないため、おかしな数値を入れるとエラーを出すようにしてあります。
プリセット12用のメモリーグループ指定もできるように項目を追加しておきました。
その他のセットモードとオートステップ・オートモードの定義表です。
オートステップの周波数割り当ては総務省で決められているため、これ以外のステップで電波が出ている可能性は低く、あえて変更する必要は無いでしょう。
必要な時に手動のSTEPで受信すれば良いと思います。
CSVファイルのフィールド定義です。tk150のCSVフォーマットとは異なりますので、適宜Excel等で変換してください。
CSVでインポートする時の処理ルールを以下に示します。
- 空白行と#から始まる行はコメントとしてスキップされます。
- 項目の""での囲みはあっても無くても構いません。
- 項目の並びは右の表の通りです。
- 必須項目はチャンネルのみです。
- チャンネルが歯抜けになっている場合は、インポート前のメモリチャンネルは変化しません。
- CSVファイル内でチャンネルが重複している場合は、後の行が優先順位が高くなります。
- チャンネルのみ記載、または、周波数が0のチャンネルは、既存のメモリチャンネルが削除されます。
- 周波数は0.1~1299.995のMHz記載で最小単位は250Hzです。それ以下の周波数は切り捨てされます。
- モードが省略されている場合は、AUTOに設定されます。
- 名前が省略されている場合は周波数が表示されます。また、6文字以上入力されていたら切り捨てられ、表示できない文字の場合はスペースになります。
- PMSは空白ならばOFF、何か文字が入って入ればONです。
- トーンスケルチが省略されていればOFF、入力可能値はOFF ON BEEPです。
- トーン周波数が省略されていれば、スケルチがOFFならば67.0、ONかBEEPならば88.5に設定されます。
※トーン周波数に設定可能な値はマニュアルをご覧ください。 - トーン周波数より右にある項目は無視されます。
- 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を加えるのは問題ないと思っています。 仮に本体が壊れたとしても私は責任を持ちませんので、自己責任でご利用ください。
さて、秋月や共立で販売されているFT232系のUSB変換インターフェースは、Vccや信号レベルを5.0Vと3.3Vで切り替えることができるので、 これを3.3Vに設定してそのままVR-150に突っ込んでやれば簡単に通信ができるというわけです。
くれぐれも言います。3.3Vモードですよ。5Vはダメ!ゼッタイ!
※VR-150の電源電圧は最大3.5Vですので、クローン信号に3.3Vを加えるのは問題ないと思っています。 仮に本体が壊れたとしても私は責任を持ちませんので、自己責任でご利用ください。
基板の実装
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を含めたパケットの種類判定を行い、ゴミはゴミとみなして自動的に除去するようにしています。
日本語化パッチを作った時は「謎のノイズ」と表現していましたが、X150を作っている過程でノイズではなくNAK(否定)パケットであることが分かりました。 つまり、意味のあるデータを送っているので、tk150では回避ができないという事になってしまいます。
※ 原因解説 ※
PCからVR-150に送信したデータはVR-150に届きますが、ワイヤードORになっているため同時にPCの受信側にもそのまま戻ってきます。 そのため、VR-150に送信したデータと同じバイト数だけ毎回空読みする必要があるのですが、謎のデータが入ってくると送信バイト数と受信バイト数が異なるため、 結果的に同期が取れなくなってエラーになってしまうという事でした。 そう言った経緯でX150ではNAKを含めたパケットの種類判定を行い、ゴミはゴミとみなして自動的に除去するようにしています。
使ってみて分かったこと・製作過程で苦労した点
- 作った自分で言うのもなんですが、使いやすいです。
- 別スレッドで動いている受信処理を中断させる仕組みを作ること。マルチスレッドのプログラミングは初めて。
- シリアルポートの受信は別スレッドで動いているため、UIに反映させるための処理を書くのが面倒だった事。