2014年9月号

トップページ > 2014年9月号 > ディジタルを楽しもう/JH1NRR辻岡哲夫 第5回 メモリキーヤを作る 3

連載記事

ディジタルを楽しもう


JH1NRR 辻岡哲夫
(JL3YMC 構成員)

第5回 メモリキーヤを作る 3

1. パソコンを使った制御について

今回は、パソコンを使ってメモリキーヤの制御を行います。具体的には、入力文章の再生、文章のメモリ登録、メモリ再生が行えるようにします。

2. ケース加工と収納について

まず、前回までに製作した基板をケースに収納することから始めます。ケース加工については、慣れておられるOMさんも多いことと思いますが、初心者の方のために説明いたします。

ケースはタカチのTS-11を使いました。TSシリーズはシャープな外観のアルミケースで、YMシリーズとともにお気に入りです。買ってきたばかりのケースは保護用のビニールで覆われていますので、穴を空ける位置を直接ボールペンや鉛筆で描き込んでいきます。穴の位置を描いた紙テープを貼るなどの方法もありますが、穴の位置がずれたり、加工途中で位置がわからなくなることがあります。直接描き込むのが一番です。

穴開け加工には、ボール盤(Drill Press)を使います。ホームセンターで売られているハンドドリルでも十分ですが、どうしても穴の位置がずれやすくなります。ボール盤は生涯使える工具です。手元に1台あると、加工精度がずいぶんと高まります。


写真はHOZANの小型ボール盤 K-21です。6mmを超えるサイズの刃に対応していませんが、十分使えます。

基板を固定する穴は、ケースの内側からではなく底面側から開けます。部品の載っていない予備基板を定規として使い、密着させるように当てながら穴の位置を描き込みます。更に、穴の位置を中心として十字の線も引いておくと、加工時に穴の位置を見失うことがありません。穴開け時は、適宜、不要となった木の角材などを下に敷くと、ケースが安定するほか、作業の安全性も増します。


未使用基板を定規代わりに使って、穴の位置を描き込みます。十字線も描き加えます。


角材の切れ端などを下に敷いて加工すると安定します。

穴の周りのバリを、大きめの径のドリルの刃を使って除去します。手でクルクルと軽く回しながら当てると簡単に取れます。両側で行って下さい。

5mmを超えるサイズの穴については、まず、5mm程度の穴を開けてからリーマを使って広げます。写真は適応サイズ3.5~19mmのリーマ(HOZAN K-4D)で、これ1本があればほとんど対応できます。細いリーマは、加工精度が若干上がりますが、加工に時間がかかってしまい、オススメではありません。現行品では、HOZAN K-442などが良い大きさでしょう。あと、リーマは必ず右方向にしか回さないようにして下さい。ぐりぐりと左右に回すと、中心がずれたり、穴の形状がでこぼこ(星形)になります。リーマで広げた穴のバリ取りは、極太のトリルの刃を使うか、半丸やすりを使って慎重に行って下さい。6~8mm程度のドリルの刃を使っても削っても除去できますが、手が滑るとケースに傷が付いてしまいますので注意して下さい。


部品どうしの干渉(当たったりすること)がないことを何度も確認して下さい。

ケース側面の黒い塗装部分は傷が目立ちやすいので、透明のクリアラッカー(スプレータイプ)でコーティングしておきます。保護用のビニールを剥がしてから、薄くスプレーして下さい。

穴開け加工が終わり、ラッカーも乾いたら、ケースを水道水で水洗いします。ケースの内側に付着した金属片を完全に取り除くためです。水をしみこませたティッシュで丹念に拭き取っても良いでしょう。アルミ屑が残っているとショートの原因になりますので、きれいに取り除いて下さい。

下の写真は、ケースにネジ留めした様子です。基板は、10mmの絶縁スペーサ(テイジン SFA-310、現行品はSPA-310)を介して取り付けました。ボリューム類、スイッチ類は、回転防止用のツメをペンチで切り取ってから着けています。ホビー用途でしたらツメはなくても大丈夫です。ただし、ナットはしっかりと回して固定して下さい。コンビネーションレンチがあるとケースに傷が付かず、また、作業がはかどります。プライヤで回すのとは大違いです。今回は、10mm、12mm、14mmの3本を使いました。


コード類は、植木用のビニタイでまとめておきます。ナイロンの結束バンドを使っても構いません。


KTCのコンビネーションレンチです。(アンテナの設営作業ではラチェット付きのものが便利です。)

最後に、テプラを使って端子の上やキートップにラベルを貼りましょう。インスタントレタリングを使うと、更にきれいに仕上がります。電鍵をつなげたら、完成です!
動作確認をしながら、一息つきましょう!

3. シリアルを使ったパソコン接続について

メモリキーヤをパソコンに接続する方法について説明します。接続方法として、USB、シリアル、無線LAN(例えば、XBee Wi-Fiを使う)、Bluetooth(例えば、秋月のモジュールをHIDで使う)など、いろいろ考えられます。今回使用したPICはUSB機能を有していますが、それはあえて使わず、最も単純な、シリアルで接続することにします。USB機能を使うと、PIC側のプログラムが複雑になることに加えて、メモリを消費してしまうからです。

最近のノートパソコンにはシリアルのインタフェースが具備されていませんが、スイッチサイエンスや共立電子産業などで、USB-シリアル変換アダプタが安価に売られています。これを使わない手はありません。5V用、3.3V用、5V/3.3V両用(選択切り替え)があります。今回は5Vで使います。接続のための回路図は、先月号の通りです。この変換アダプタはホスト側として動作しますので、TX端子は出力、RX端子は入力になります。PICもホスト側ですので、TXをRXに、RXをTXに接続(クロス接続)する必要があります。インターネット上の記事の中には、一部、間違った記述のものが見られましたので、気をつけて下さい。


上から「FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)」と「FT232RL搭載小型USB-シリアルアダプタ 5V」です。前者はスイッチサイエンス製のオリジナル商品です。後者はSparkfun製で、スイッチサイエンスのほか、共立電子産業などで購入できます。

下の写真は、USB-シリアル変換アダプタとPICkit 3を接続した状態です。将来的には、正面に穴開け加工を行いたいと思いますが、現在は、ケースが半開きの状態で使用しています。四角い穴を開けるには、ボール盤に加えて、ハンドニブラと平やすりの工具を使います。


何とかPICkit 3とUSB-シリアル変換アダプタを刺すことができました。意外なものが干渉することがありますので、基板を固定する穴の位置を決めるときは、PICkit 3を含むコネクタ類をすべて装着した状態で行って下さい。


USBケーブルの引き出し方については、ほかの案を検討中です。

4. パソコンによる制御(追加機能)について

パソコンによる制御として、以下の追加機能を考えました。

  1. 入力したテキストをそのまま送信する。(1行ごとに送信)
  2. 入力したテキストをメモリに登録する。
  3. メモリに登録した内容を送信する。
追加機能を書き加えたCプログラムはこちらです。上記以外の追加機能も、Cプログラムを参考にしながら簡単に書けると思います。

今回のシリアル通信の処理ですが、文字の取りこぼしが発生しないように、割り込み処理とリングバッファのテクニックを使用しています。ほかの製作物の制御プログラムにも応用できますので、簡単に説明します。リングバッファとは、環状のメモリ(擬似的に実現)で、書き込み位置を示すライトポインタ(wp)と、読み出し位置を示すリードポインタ(rp)で制御しています。書き込む場合は、wpの位置に文字を格納してwpの値をインクリメント(+1)します。一方、読み出す場合は、rpの位置の文字を読み出してwpの値をインクリメント(+1)します。なお、wpとrpが等しい場合は、バッファは空ですので読み出せません。等しくない場合だけ、読み出せます。このように実装すると、メモリコピーが発生しませんので、軽い処理でFIFOバッファを実現できます。


リングバッファの概念

今回の制御プログラムでは、下図のように、送信と受信のそれぞれに32バイトのリングバッファを挿入しています。受信時から説明します。RX端子を経由して1文字受信すると、Receive Interrupt(受信割り込み)が発生してRCIF=1(PICの状態ビットの一つが1)になりますので、ReadUSART()関数でEUSARTコントローラから文字を取り出して受信リングバッファ(rxbuf)に格納します。32バイトのバッファがあふれない内に、usart_rx()関数を使って読み出すようにします。次に、送信時についてです。送信したい文字をusart_tx()関数を使って送信リングバッファ(txbuf)に書き込みます。EUSARTコントローラの送信バッファが空になるとTransmit Interrupt(送信割り込み)が発生してTXIF=1になりますので、WriteUSART()関数でリングバッファの値をEUSARTコントローラに書き込み、TX端子からシリアル送信します。シリアル送信するデータがない場合は、一時的にTXIE=0にして割り込みを禁止にします。送信データが発生したときにTXIE=1に戻すことで、すぐに割り込みが発生します。


送信/受信バッファとしてのリングバッファです。通常は受信バッファサイズの方を大きめに設定しますが、今回は、送信/受信ともに32バイトの固定サイズです。RAM容量に余裕があればmalloc()関数などを使って動的サイズに対応させるとFBです。

5. 追加機能の使い方

まず、パソコンにシリアル通信用ソフトをインストールして下さい。ここでは、広く使われているTera Termを使う場合について説明します。USB-シリアル変換アダプタも接続して、メモリキーヤの電源も入れておきます。Tera Termを起動すると、下図のようなダイアログが表示されます。表示されない場合は「File」→「New conneciton」を実行します。「Serial」では「COMxx: USB Serial Port (COMxx)」を選択して下さい(xx部分は数字です)。最後に「OK」を押します。


環境によってはCOM3以外のCOM番号になっているかもしれません。

次に、「Setup」→「Serial Port」を実行します。ダイアログが開きますので「Baud rate: 9600」「Data: 8bit」「Parity: none」「Stop: 1bit」「Flow control: Xon/Xoff」が選択されていることを確認して下さい。XON/XOFFとは、パソコンとメモリキーヤ間の通信でCTRL-S/CTRL-Qによる一時停止と再開を行うことを指定するものです。今回、メモリキーヤのバッファサイズは32バイトしかありませんので、XON/XOFFのフローコントロールを使いますが、潤沢なバッファサイズの場合はフローコントロールなしでも問題ありません。設定後、「OK」を押します。


フローコントロールとしてXON/XOFF(CTRL-S/CTRL-Q)制御を使うことを選択して下さい。

これでメモリキーヤと通信ができる状態になっていますので、何かテキスト文章を入力して、Enterキーを押してみて下さい。入力したテキスト文章に相当する電文がスピーカから聞こえれば、成功です。

それでは、メモリに電文を登録してみましょう。「%+(メモリCH番号)+テキスト文章」で、登録できます。連続送信の場合は、語頭に「~」または「\」をつけて下さい。なお、よく使うBTバーの場合は「#」だけの記述で大丈夫です。メモリ登録された後、すぐにその内容が再生されます(下図の1行目)。※ Cプログラムを修正すれば、%記号や#記号を変更することができます。

メモリ登録した内容を送信する場合は「!+(メモリCH番号)」を実行します。※ Cプログラムを修正すれば、!記号を変更することができます。

Windowsのテキストエディタ(メモ帳など)に文章を書いておいて、コピー&ペーストで送信することもできます。メモリチャネル数が不足の場合の代替え手段になります。例えば、インターネット上の英語の長文を流し込めば、モールス受信の練習に活用できるかも知れません。また、Tera Termのマクロ機能を使えば、更に、いろいろな応用例が考えられると思います。


動作確認におけるTera Termの画面です。

下の表に、使用方法(入力値と動作)をまとめておきます。使いやすいように、プログラムをカスタマイズして下さい。


※ クリックするとPDF版の使用方法が開きます。

6. 部品リスト

最後に、部品リストをまとめておきました。また、筆者が実際に使用した工具類も添えておきました。参考になりましたら幸いです。


※ クリックするとPDF版の部品リストが開きます。

7. おわりに

メモリキーヤの製作紹介は今回で最後です。既存のパソコン用CWソフトのように、スペースで区切られるごとに送信する機能も実装したかったのですが、残念ながら、PICのメモリ容量(RAM容量)の制限のために実現できませんでした。今回使用したPIC18F2550のRAM容量は2KBですが、PIC32MX150F128Bなどに交換すればRAM容量は32KBになります(PICの電源電圧が3.3Vのため若干の回路変更が必要、5Vトレラントピンを使う)。PIC32MXシリーズのPICは、消費電力が大きくなってしまうことに加えて、リマッパブルピン(RP)の設定が複雑で初心者向きではなかったので今回は避けました。興味のある人はPICの置き換えに挑戦してみて下さい。コンパイラはXC8ではなくXC32を使うことになりますが、ほぼ同じプログラムで動きます。メモリに余裕が生まれることで、メモリ登録されたテキストの一覧表示や、細かい設定、例えば、DOT/DASH(左右)の入れ替えなどの機能も実装できるようになります。

今回のCプログラムも、この記事のために書いたオリジナルのものです。ぜひ、みなさんが使いやすいように、改良を加えてみて下さい。

筆者追記: PLIB(Peripheral Library)が廃止され、また、MPLAB Xが安定動作するようになりました。これを受けて、最新のMPLAB XとXC8でコンパイルできるコードに書き直しました。上記のファイルを差し替えましたので、ご活用下さい。なお、MPLAB XとXC8でコンパイルしたときのwarning表示を抑制するには、Properties→XC8 compiler→Warning levelの値を-3から-2に変更して下さい。(2019年12月)


無線機(ICOM IC-9100M + UX-9100)とメモリキーヤを接続した様子です。
Paddleは、Morse-Dirigent(取り扱い:ウエダ無線)です。

頭の体操 詰将棋

3人娘アマチュア無線チャレンジ物語

  • 連載記事一覧
  • テクニカルコーナー一覧

お知らせ

発行元

発行元: 月刊FBニュース編集部
連絡先: info@fbnews.jp