NJ-EK F886 : アイアンビックパドル用エレクトリックキーヤ by Tama (2008/08/12 -- )
メッセージメモリ付エレキー(PIC16F886を使ったエレキー)

背景
いくつか、エレキーを製作して短点、長点の処理やスクイーズ時の処理もプログラミング上自分なりの方法ができてきました。
次はメッセージメモリ機能を搭載したものをコーディングしてみたいと思うようになりました。
また、いままで使ったことのない型番のPICを使って経験値を高めようという思惑もあります。
構想
PIC16F886 IO割付
28ピンのDIPタイプPICに以下のようにIO割付をしました。押しボタン用のDIを8点確保して、6ケを各メモリーチャンネルの読み出しと書き込み用に、
残り2つの押しボタンはファンクション機能を持たせて、メモリーバンクの切り替えや同時押しで付加機能を追加しようとしてますが現段階では詳細まで
決定していません。
| PIC16F886 | |||||||||
| リバース(長短点反転) | DI | RE3/MCLR/VPP | 1 | 28 | RB7/ICSPDAT | DI | PB1 MEM1PB | ||
| 速度設定(0−5V) | AI | RA0/AN0/ULPWU/C12IN0 | 2 | 27 | RB6/ICSPCLK | DI | PB2 MEM2PB | ||
| ウエイト設定(0−5V) | AI | RA1/AN1/C12IN1 | 3 | 26 | RB5/AN13/T1G | DI | PB3 MEM3PB | ||
| DOTメモリタイミング(0−5V) | AI | RA2/AN2/VREF-/CVREF/C2IN | 4 | 25 | RB4/AN11/P1D | DI | PB4 MEM4PB | ||
| DASHメモリタイミング(0−5V) | AI | RA3/AN3/VREF+/C1IN | 5 | 24 | RB3/AN9/PGM/C12IN2 | DI | PB5 MEM5PB | ||
| パドルDOT | DI | RA4/T0CKI/C1OUT | 6 | 23 | RB2/AN8/P1B | DI | PB6 MEM6PB | ||
| パドルDASH | DI | RA5/AN4/SS/C2OUT | 7 | 22 | RB1/AN10/P1C/C12IN3 | DI | PB7 FUNC1PB | ||
| 電源 | GND | VSS | 8 | 21 | RB0/AN12/INT | DI | PB8 FUNC2PB | ||
| セラロック20MHz | HS | RA7/OSC1/CLKIN | 9 | 20 | VDD | +5V | 電源 | ||
| セラロック20MHz | HS | RA6/OSC2/CLKOUT | 10 | 19 | VSS | GND | 電源 | ||
| LED3 | DO | RC0/T1OSO/T1CKI | 11 | 18 | RC7/RX/DT | DI | ウエイト固定(RA1はブザー音量) | ||
| キー出力 | DO | RC1/T1OSI/CCP2 | 12 | 17 | RC6/TX/CK | DO | LED1 | ||
| ブザー出力 | DO | RC2/P1A/CCP1 | 13 | 16 | RC5/SDO | DO | LED2 | ||
| シリアルメモリ | I2C | RC3/SCK/SCL | 14 | 15 | RC4/SDI/SDA | I2C | シリアルメモリ |
プログラム済み16F886 (Ver.1.0)に関してはこちらのドキュメントを参照ください。
シリアルメモリ 24LC256
メッセージの保存用に、I2Cインターフェイスのシリアルメモリ24LC256を使います。16F886のEEPROMでは足りないので外部メモリをつかいます。
回路図
回路は以下の通りです。目が良くないので表面実装部品は使っていません。したがってスペース効率はあまり良くないことが容易に想像できます。

ソフトウエア(アルゴリズム)
ソフトウエアのソースはMikroCでコーディングしています。
メインループでは、AD入力からのVRの電圧の読み込み、キーイング速度の計算、ウエイトの計算、長短点メモリータイミングの計算、押しボタンの入力待ち等が記述されています。
割り込みルーチンは、1msのタイマー割り込みが走っています。
タイマー割り込みでは、パドルからの入力をポーリングし入力があった場合はブザーを鳴らしキーイングする処理が記述されています。
メモリーするメッセージ用に文字型の配列 char buf[80]を確保しています。短点、長点、スペース、終端の4種類のコードを2ビットを使って表現しています。1文字が長短点4つから成るとすると1バイトで1文字、80バイトで約80文字がbuf[80]に格納できることになります。
メッセージメモリモードになると、パドルがはじめてタッチされた時点からメモリーを開始します。(最初のスペースの連続はメモリーされません)またメモリー中のスペースは、そのままメモリーされるので、スペースの連続はPICのメモリを消費することになります。押しボタンによりメッセージの入力が完了するとbuf[80]の内容はシリアルメモリの対応するアドレスに保存されます。シリアルメモリに保存されたデータは基板の電源を落としても保存されます。
メッセージの呼び出しは、シリアルメモリからメッセージをbuf[80]に読み込み。2ビットづつ順番にデコードし長短点、スペースをキーイングしていきます。終端コードに達すると終了します。メッセージの呼び出し時は最初にVRからキーイング速度を読み込みその値を終了まで使うので、メッセージ読み出し中のVRからの速度変更はできません。
ブザーは発信器内臓タイプで、5Vを印加すると音がでるタイプです。当初5VのON/OFFで音を鳴らす予定でしたが、PWMによる音量調整ができる機能を追加しました。PICのRC7をHIGHにすると、RA1のアナログ入力はウエイト調整用として機能しRC7をLOWにするとウエイトは1:3の固定となりRA1のアナログ入力はブザーの音量調整用として機能するようにしました。PWMのDUTYに応じて音量が変化するようになりました。DUTYが小さいときは澄んだきれいな音がでますが、DUTYを最大にすると直流で駆動したときのようなひずんだ感じの音になってしまいました。
基板
基板上に押しボタンが乗るようにし、レギュレータも寝かして配置しました。外部とのIOとなるピンヘッダも90度タイプを使い基板の高さを抑えています。
また、基板上の押しボタンは基板にハンダ付けせずに基板外(ケースのパネル面等)に置く場合は押しボタンがハンダ付けされる部分から電線を引っ張る
こともできますが、別にピンヘッダ用のパターンを基板上に設けています。

操作方法
下の動作確認用の回路を元に説明します。
セットアップ
基板上のピンヘッダJP3に、速度設定用のVR(50K)、ウイエト設定用のVR(50K)、送信機への配線を接続。
ピンヘッダJP4に、アイアンビックパドルを接続
電源投入時ブザーより「OK」と出力されます。
電源投入後は、パドル操作をすることによって通常のエレキーとして動作します。
速度設定VRによってキーイング速度を、ウエイト設定VRによって長点短点の比を変化することができます。
メッセージの記録
PB1を長押し(約2秒)するとブザーが約1秒間鳴ります。ブザーが鳴っている間にPB1を開放します。次に、メモリさせたい内容をパドル
操作によって入力します。入力終了後、PB1を再度短く押します。これでメモリー1にメッセージが記録されました。メッセージの記録操作を実行すると実行前に記録されていたメッセージは消去されます。
FUNC1ボタンを押した状態でPB1を長押しすることによってメッセージをメモリするとメモリー7にメッセージが記録されます。
PB1−PB6の6CHとFUNC1ボタンと併用でPB1-PB6の6CH、合計12CHのメモリCHがあります。
短に、メッセージの消去をする場合は、PBの長押し後、パドル操作をせずに再度PBを短く押すとメッセージは消去されます。
メッセージの再生
PB1を短く押して約2秒以下)ボタンを離すとメモリー1に記録されている内容が送信されます。
PB1-PB6がメモリー1−メモリー6に対応します。
メッセージのメモリ動作と同様に、FUNC1ボタンを押してPB1を短く押すとメモリー7に記録されている内容が再生されます。
メッセージ再生中に、パドルのどちらかをタッチするとメッセージの再生は中断されます。直後に同じCHのメッセージを再生すると
中断された位置からではなく、メッセージの最初から再生されます。
メッセージの連続再生
FUNC2ボタンを使うことによって約3秒の間をあけて記録されたメッセージを繰り返し再生することができます。
メモリー1の内容を繰り返し再生する場合はFUNC2ボタンを押しながらPB1を押します。次にPB1を開放したのちにFUNC2ボタンを開放します。
メモリー7の内容を繰り返し再生する場合はFUNC2、FUNC1ボタンを押しながらPB1を押します。次にPB1、FUNC1ボタンを開放したのちにFUNC2ボタンを開放します。
連続再生中に、パドルのどちらかをタッチするとメッセージの連続再生は中断されます。直後に同じCHのメッセージを連続再生すると
中断された位置からではなく、メッセージの最初から再生されます。
連続再生するCHはどれか1つでも実用上問題ないとおもいましたが、すべてのCHで連続再生ができるようにしてあります。

ケースに収納しVR、ジャック等を取り付ける
メモリータイミング用のVR2つは2.5Vにセットし約50%から長短点メモリーを有効にした。
テプラーでレタリングをして完成
PICのRC7入力をGNDに落としてウエイトは1:3に固定し、ウエイトVRはブザーの音量調整用に使っています。

背面からの写真

参考文献等
http://n1yn.com/16F88Ekey.html
長短点メモリ等
http://akizukidenshi.com/
部品調達等