04-Mar-2004にある、エレキーの実装に関する話。
CQ ham radio Jun/1980 p.283「消費電流30μA〜送信機のキーイング極性を気にしないで使用できるCMOSエレキー/JK1DLQ 久保田 徹」の切り抜きを持っていたのですが、引っ越しか何かのドタバタでどこかへやってしまったのかいくら探しても見つかりません。仕方が無いので、国会図書館に複写申込を出しました。
とはいえ、複写物が届くのをぼーっと待っているのも時間が勿体ないので、引用していたフローチャートに従ってArduino上での実装を試みました。コードが書き上がったばかりで、READMEの記述は全然間に合っていません…keyer-test(04-Aug-2025)のドキュメントも未だ書いていなかったりしますが。
コードを書き動作を試したことで分かったのですが、これ、Iambic-Bの実装です(フローチャートを見りゃ分かるだろ、と言われそう)。パドルから手を離していても長点ないし短点メモリの内容が残っていればそれを送信して動作が停止する→つまり、スクイーズ操作後にパドルから手を離すと一つ余計な符号が出てしまうのは当然のことなのです。
だとしたら、Iambic-Aの実装はどう行えば良いのか?長点ないし短点の送信後、パドルの押下が一切行われていない場合は長短点メモリの内容をクリアする、という処理を入れれば良いのでしょうか。
パドル操作の検出も、GPIO割り込み+タイマによるポーリングの二段構えになっている部分は改良の余地があります。250μs周期ならGPIO割り込みを使う必要は無さそうですし、GPIO割り込みを使うならタイマの動作は符号の送信中に限定する方が省電力になりそうです。
今回はyack-arduino(ATTiny45→Arduinoへの移植)とは逆のアプローチで、Arduino化していないAVRでも動かせるようWiring APIを敢えて使わずに記述しています。そうすると、byte型もunsigned charに直さないといけませんね。
早速手を入れて、keyer-testにかけてみると…
uaa@framboise:~/z/keyer-test$ ./keyer-test /dev/ttyU1
wait for device...
device ready
menu:
a) do all tests
0) check dit/dah length
1) check simple timing
2) check dit/dah memory (non-squeeze)
3) check dit/dah memory (squeeze)
4) check squeeze
c) calibration
v) verbose output on
x) exit
-> a
* dit/dah length
dit: on=1438, off=1421, on/off=1.012
dah: on=4204, off=1563, on/off=2.690
dah/dit: 2.924
dit: total=2859, total/on=1.988, total/off=2.012
dah: total=5767, total/on=1.372, total/off=3.690
dah total/dit total=2.017
* simple
dit 1- 1/ 4 .
dit 1- 4/ 4 .-
dit 1- 5/ 4 ..
dit 1- 6/ 4 -.
dit 1- 7/ 4 ..
dah 1- 1/ 8 -
dah 1- 9/ 8 --
* dit/dah memory (non-squeeze)
dit -> dah 1/ 4 .-
dah -> dit 1/ 8 -.
* dit/dah memory (squeeze)
dit on, dah 1/ 4 .-
dit on, dah 5/ 4 .-.
dit on, dah 6/ 4 ..-
dah on, dit 1/ 8 -.
dah on, dit 5/ 8 --
dah on, dit 6/ 8 -.
dah on, dit 9/ 8 ---
dah on, dit 10/ 8 --.
* squeeze
dit + dah 1/12 .-
dit + dah 2/12 --
dit + dah 4/12 --.
dit + dah 5/12 .-.
dit + dah 7/12 .--
dit + dah 8/12 --.
dit + dah 9/12 .--
dit + dah 10/12 ---
dit + dah 11/12 .--
dit + dah 13/12 .-.-
dit + dah 17/12 --.--
dit + dah 18/12 .-.-.
dit + dah 21/12 --.--
dit + dah 22/12 .-.-.
dit + dah 24/12 --.--
dah + dit 1/12 -.
dah + dit 6/12 --
dah + dit 8/12 -.
dah + dit 9/12 -.-
dah + dit 13/12 -.-.
dah + dit 16/12 -.--
dah + dit 17/12 -.-.
dah + dit 18/12 -.--
dah + dit 19/12 -.-.
dah + dit 21/12 -.-.-
menu:
a) do all tests
0) check dit/dah length
1) check simple timing
2) check dit/dah memory (non-squeeze)
3) check dit/dah memory (squeeze)
4) check squeeze
c) calibration
v) verbose output on
x) exit
-> x
uaa@framboise:~/z/keyer-test$
|
※DOT_TICKはオリジナルの状態(300)から少し増やした、400で試しています
なかなか不思議な動きをしています。simpleのdit 1-4/4, 1-6/4は絶対に「-」があってはいけないはずなのですが、これは一体??55.8kg(23:45)