2013年02月24日

12F1822・エレキー(送信モニタ版)

12F1822・エレキー

エレキーの送信練習で、ある程度速度を上げていくと

 「えっと・・短点が足りなかったかな?」

などと感じることもあるかと思います。

【ソフトウエア】
今回は、送信したモールス信号を文字列に変換して、PIC12F1822マイコンのUARTシリアル通信機能を利用してPCのターミナルソフト上に文字を表示するようにしてみました。

なお表示できるのは下記に示すアルファベット、数字、記号です。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890
,./?()-:;\'$"


・キー入力後に生成された符号を元にマイコン内部で上記文字列に対応する符号列と照合して文字に変換します。
・符号は、ヘッダとして1、Dot=0、Dash=1として最大7bitまでの保存します。
・例えば、 ・- と入力されると、 0b00000101 (0x05) となり、対応する "A" としてシリアル出力されます。
この変換は ソースコード code.c に記述されています。


【ハードウエア】
シリアル通信機能を使わない場合も通常の小電力エレキーとして使えるようにしたため、前回のPIC12F1822エレキー回路から下記のような変更があります。

 ・ブザー出力を速度調整ボリューム電源と共用
  (これに伴いボリュームA/D変換は符号開始時のみ取り込みとしました。)

 ・キー出力、PTT(スタンバイ)出力をマイコン電源On時の
  Dot・Dash入力状態により機能選択できるようにしました。

12F1822・エレキー回路図


【出力モード切換】
電源On時に下記の操作で出力ポート(RA4とRA5)の機能が切り換ります。

Dot Key
 On RA5 → PTT(パワーOn状態)
 Off RA5 → Key Out

Dash Key
 On RA4 → Key Out
 Off RA4 → UART(シリアル出力)


【シリアルインターフェース】
シリアル→USB変換は「秋月電子のFT232RL USBシリアル変換モジュール」を使用しました。
Vcc(5V電源)もこちらから供給しています。
接続、ジャンパ設定は下記の通りです。

12F1822・エレキー(送信モニタ版)


【PC表示】
PCのターミナルソフト(TeraTermなど)で文字を表示できます。
[BT] 符号により改行します。
同時にマイコン内部で計算しているの送信速度を "○○WPM" で表示します。

12F1822・エレキー

なお、速度の単位は次のように計算されます。
 ・1WPM(Word/Minutes) = 5CPM(Code/Minutes)    1Word="PARIS"が基準
 ・20WPM → DOT期間:60msec


【タイミングチャート】
符号の”C” (-・-・) を出力した場合の実測タイミングです。

波形は上から
 [1] Dotキー入力 (Low:キーOn チャタリングあり)
 [2] Dashキー入力 (Low:キーOn チャタリングあり)
 [3] ブザー出力 (500Hz方形波) と 速度調整A/D電源On (実際には見分けつきません)
 [4] PTT信号(パワーOn状態) (Low:スリープ状態)

12F1822・エレキー


【動作ビデオ】




【UART関連ソースコード】

UARTの初期設定や、送信処理は下記のような感じです。
(OSC 2MHz にて 19200bps)

//───────────────────────────────────
// Define Code Parameter
//───────────────────────────────────
#define TX_NUM 16

//───────────────────────────────────
// Define User Memory
//───────────────────────────────────
static unsigned char TxBuf[TX_NUM];
static unsigned char TxBufCnt = 0x00;
static unsigned char TxBufSndCnt = 0x00;

//───────────────────────────────────
// 初期化
//───────────────────────────────────
void init_uart( void )
{
SYNC = 0;
BRGH = 1;
BRG16 = 1;
SPBRG = 25; // 19200bps at 2MHz OSC
TXCKSEL = 1; // TX/CK function is on RA4
TXEN = 1;
SPEN = 1;
}

//───────────────────────────────────
// 送信データ設定
//───────────────────────────────────
void set_TxData( char dat )
{
TxBuf[TxBufCnt++] = dat;
if( TxBufCnt >= TX_NUM )
{
TxBufCnt = 0;
}  
}

//───────────────────────────────────
// 送信処理
//───────────────────────────────────
void send_TxData( void )
{
if( TXIF && (TxBufSndCnt != TxBufCnt) )
{
TXREG = TxBuf[TxBufSndCnt++];
if( TxBufSndCnt >= TX_NUM )
{
TxBufSndCnt = 0;
}  
}  
}



サンプルは下記URLよりダウンロードできます。
 http://hmmk.co.jp/sample/12F1822_Elekey_2013-02-24.zip


【 PIC18F14K50版】
送信練習専用として常にPCに接続して使用する事を前提とすれば
USB機能内蔵の PIC18F14K50 を使用した方がコストやスペースメリットがあります。

近いうちに「PIC18F14K50 を使用したUSBエレキー」の記事を書きたいと思います。

「PIC18F14K50 を使用したUSBエレキー」の記事を投稿しました。(2013/4/3)
 http://micom.hamazo.tv/e4279177.html




同じカテゴリー(マイコン開発)の記事

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
12F1822・エレキー(送信モニタ版)
    コメント(0)