懲りずにエレキーのバージョンアップ
2013-09-18
何やら取り憑かれたように、夜な夜なエレキーの改良を進めていたりします
やはり、メッセージキーヤー機能の「完璧なる具備」を目指し、台風到来の三連休も暇を見つけてはあれこれ構想を練っていましたが、漸く「大団円」に向かっています。

これまでのデバッグではTM-x55のサイドトーンを使っていましたが、台風の最中に「やっぱ、低周波発振器が要る
」と思い、買っておいたはずのLMC555を探しても見当たらず・・・結局、このエレキーと同じPICで方形波発振器を作り、ブレッドボードに組み立ててしまいました。低周波出力の直後にコンデンサによる簡単なLPFを付けると、前にBPFを組み込んでいたスピーカで結構いい音がしますし、圧電素子(ブザーじゃないですよ)でも音が小さいだけでちゃんとモニタできるものが完成。TS-590のサイドトーンを信じて
で800Hzへの合わせ込み(うねりが小さくなるところへの追い込み)をプログラム論理で行い、まずまずの出来映えになりました。
実は、エレキーの方はPICのプログラムメモリ限界が近づいてきたため、またしても重箱の隅を突くような作業を経て、何とか256バイトほどまで空き領域を拡げる一方、とりあえず「8Ch」のEEPROM上のメモリ領域を準備、PICkit3で書き込む際にEEPROMの所定位置にメッセージを書き込んで、各Chが正しく動作するところまで確認。その後、個々のCh書き換えをどうするか考えた挙げ句、以下のような手順で行うようなプログラムを追加作成しました。
1) 赤青ボタン両方を押しながら電源ONでメッセージ書き換えモードへ移行
2) エレキーが「?」を送出してメモリ番号投入待ちへ
3) 0-7の数字をモールス符号でパドル入力して書き換えChを指定
4) きちんと読み取れるとエレキーが「R」を送出、文字や範囲外の数字なら「?」を送出して再度待ち状態へ
5) Chが決まると1文字パドルで入力する毎に青ボタン押下、正しく検出すると「R」、変な文字なら「?」を送出
6) パドルからの文字入力直後に赤ボタンを押すと、「R」送出後、その文字の後ろに「1文字空白」が挿入される
7) そのChの文字数最大、或いはパドル入力せずに赤ボタンを押すと、書き換えたChのメッセージを一通り送出して終了
・・・と書くのは簡単なんですが、パドル操作の「記録」、符号からアルファベットor数字の逆引きなどの処理を狭いプログラムエリアに押し込むのは結構大変でした。結果的に元々のプログラム部分には、そんなに大袈裟な改造は必要無く、ほぼ独立した機能を追加するイメージで済みました。
序でに、設定した送出速度を記憶しておき、上記の書き換え処理中はこのエレキーの最低速度(15WPM)にして入力ミスを減らし、終わったら元の速度に戻すようにしました。このスピード感覚は、最初に送出される「?」で何となく掴んでおくとスムーズに行きます。
ちなみにこの記録方式は、前述したように「タイミング論理による記録」でなく「パドル操作を記録」していますので、入力された文字が正しく認識されれば、きちんとした符号になって送信されます。ここがミソかも
まぁ、8ピンPICにC言語では無理なプログラミングと思ったら、案外行けちゃってます。後は、CQマシーンとして「n秒後に繰り返す機能」が入れば殆ど「パーフェクト」でないかな
結局、何だかんだと機能追加していたら「本気モード」になってしまいました
こうなると「サイドトーンを付けなかった」のがちと痛いですが、メッセージ書き換え機能付きミニ・キーヤーが完成しそうですよ


これまでのデバッグではTM-x55のサイドトーンを使っていましたが、台風の最中に「やっぱ、低周波発振器が要る


実は、エレキーの方はPICのプログラムメモリ限界が近づいてきたため、またしても重箱の隅を突くような作業を経て、何とか256バイトほどまで空き領域を拡げる一方、とりあえず「8Ch」のEEPROM上のメモリ領域を準備、PICkit3で書き込む際にEEPROMの所定位置にメッセージを書き込んで、各Chが正しく動作するところまで確認。その後、個々のCh書き換えをどうするか考えた挙げ句、以下のような手順で行うようなプログラムを追加作成しました。
1) 赤青ボタン両方を押しながら電源ONでメッセージ書き換えモードへ移行
2) エレキーが「?」を送出してメモリ番号投入待ちへ
3) 0-7の数字をモールス符号でパドル入力して書き換えChを指定
4) きちんと読み取れるとエレキーが「R」を送出、文字や範囲外の数字なら「?」を送出して再度待ち状態へ
5) Chが決まると1文字パドルで入力する毎に青ボタン押下、正しく検出すると「R」、変な文字なら「?」を送出
6) パドルからの文字入力直後に赤ボタンを押すと、「R」送出後、その文字の後ろに「1文字空白」が挿入される
7) そのChの文字数最大、或いはパドル入力せずに赤ボタンを押すと、書き換えたChのメッセージを一通り送出して終了
・・・と書くのは簡単なんですが、パドル操作の「記録」、符号からアルファベットor数字の逆引きなどの処理を狭いプログラムエリアに押し込むのは結構大変でした。結果的に元々のプログラム部分には、そんなに大袈裟な改造は必要無く、ほぼ独立した機能を追加するイメージで済みました。
序でに、設定した送出速度を記憶しておき、上記の書き換え処理中はこのエレキーの最低速度(15WPM)にして入力ミスを減らし、終わったら元の速度に戻すようにしました。このスピード感覚は、最初に送出される「?」で何となく掴んでおくとスムーズに行きます。
ちなみにこの記録方式は、前述したように「タイミング論理による記録」でなく「パドル操作を記録」していますので、入力された文字が正しく認識されれば、きちんとした符号になって送信されます。ここがミソかも

まぁ、8ピンPICにC言語では無理なプログラミングと思ったら、案外行けちゃってます。後は、CQマシーンとして「n秒後に繰り返す機能」が入れば殆ど「パーフェクト」でないかな


こうなると「サイドトーンを付けなかった」のがちと痛いですが、メッセージ書き換え機能付きミニ・キーヤーが完成しそうですよ

- 関連記事
-
- ミニ・エレキーを解剖する-C言語処理編
- ミニ・エレキーのバージョンアップ完了!
- 懲りずにエレキーのバージョンアップ
- エレキーの「ー」 (了)
- 省エネなエレキーに電源スイッチ・・・の理由
コメントの投稿
そろそろローバンドな季節
おはようございます。
エレキーの開発進んでいるようですね!
ひとつ質問なのですが、EEPROMにメッセージを記録するときのデータ形式は符号情報そのもの(例えば短点、長点、スペースの2bit情報)なのか、もしくは各キャラクターを1バイト情報に割り当てたものを記録しているのでしょうか?
12F1822は小粒でぴりりと効いた感じなPICですよね。安いですし。自分もこのPICで挑戦しようと思います(^-^)/
エレキーの開発進んでいるようですね!
ひとつ質問なのですが、EEPROMにメッセージを記録するときのデータ形式は符号情報そのもの(例えば短点、長点、スペースの2bit情報)なのか、もしくは各キャラクターを1バイト情報に割り当てたものを記録しているのでしょうか?
12F1822は小粒でぴりりと効いた感じなPICですよね。安いですし。自分もこのPICで挑戦しようと思います(^-^)/
何れ記事に・・・
ぶんさん、こんばんは。
EEPROMへのセーブデータは「ASCII」(各キャラクターを1バイト情報に割り当てたもの)にしています。メンテナンス上(初期メッセージに変更があった場合など)、PICに書き込む時点で直視的に判る方が良いかなぁ・・・という判断です。
移動運用などの「長~いCQ文言送出」ではもっと圧縮した方が良さそうに思えますが、幾ら何でもCQ文言が「256文字を超える」ということはないだろう・・・ということで、EEPROMはスッキリ仕様(^^;
今回、「ASCII⇒符号化」は処理ベースで簡略になるよう工夫した部分です(といっても他のOMさんと似たようなものです)が、「長点:1、短点:0」でコード化・データ化し、その1つ上のビットを必ず「1」にして左シフトで取り出していく方法にしています。
また、ASCII コードの「値」(例えば、'A'なら0x41)で索引すると一発で符号化コードが出てくるようにしてあります(0x20以下のデータは送出対象でないため、0x20が「先頭」(=0)になるようにデータテーブルを書いています)。詳細は近々「記事」になると思いますので乞うご期待!!
EEPROMへのセーブデータは「ASCII」(各キャラクターを1バイト情報に割り当てたもの)にしています。メンテナンス上(初期メッセージに変更があった場合など)、PICに書き込む時点で直視的に判る方が良いかなぁ・・・という判断です。
移動運用などの「長~いCQ文言送出」ではもっと圧縮した方が良さそうに思えますが、幾ら何でもCQ文言が「256文字を超える」ということはないだろう・・・ということで、EEPROMはスッキリ仕様(^^;
今回、「ASCII⇒符号化」は処理ベースで簡略になるよう工夫した部分です(といっても他のOMさんと似たようなものです)が、「長点:1、短点:0」でコード化・データ化し、その1つ上のビットを必ず「1」にして左シフトで取り出していく方法にしています。
また、ASCII コードの「値」(例えば、'A'なら0x41)で索引すると一発で符号化コードが出てくるようにしてあります(0x20以下のデータは送出対象でないため、0x20が「先頭」(=0)になるようにデータテーブルを書いています)。詳細は近々「記事」になると思いますので乞うご期待!!