100均に行けばブザーの代用ぐらいありそうだけど、、マイコンプログラミングを最近やってないので、LPC810で音を出してみた。音源(発振)はタイマーを動かしてPWMを生成してGPIOからスピーカに出力、入力は電鍵の端子をGPIOを接続してOn/Offさせた。気休めにコンデンサを介してるとはいえ、インピーダンス整合とかIOポートの電流(ファンアウトというのか、ドライブ能力)を考えずにIOポートをスピーカに直結するするのはかなりまずいと思う。。けど、まぁ動いているから良しとしてる。さすがに音はかなり歪んでいます。
参考までに、動けば良しのずさんな回路図。。LEDを点灯させるところまではいいとして、、コンデンサをかましてIO出力をSPに接続している。。
でたらめついでに、mainループの抜粋。GPIO_P0_PIN1が0(キー押下)だったらカウンタ値:5455でwaitする音を出して、1(キーオープン)だったらカウンタ値:1(聞こえない高い音)とする。
ちなみに、このソースのまずい所
while(1){
val = GPIOGetPinValue( GPIO_P0, GPIO_PIN1);
if(val == 1){
tone=1; // super high freq
}else{
tone=5455;
}
LPC_SCT->CONFIG |= (1 << 7);
LPC_SCT->MATCHREL_L[0] = tone - 1;
LPC_SCT->CONFIG &= ~(1 << 7);
// mywait();
}
- キー(電鍵)のチャッタリングを考慮していない
- 本来IOは割り込み処理で実装すべき(上記はポーリングで実装)
- ループするたびにカウンタ値を上書きしている
- 音を出さない実装としてはタイマーの動作を止めるべき。聞こえない程の高い周波数を出してごまかしている場合ではない(電気代がもったいない)
とにかく行儀が悪い。
電鍵の接点をLPC810のIOポートに接続する。IO設定でPullUp機能があるので、GNDに接地した場合にOnとした。
ストレートキーだと短点、長点、空白をすべて自分の手で制御する必要があって、癖のある聴きづらい符号になったり、On/Offの比率がまずくて誤認識される可能性がある。だから、、自己流のコードを送信ないように基礎練習が必要。だけど、、正しい符号(美しい符号)って何なのか?いまいち分かっておらず、まずはエンコーダで波形を見ながら打ってみた。案の定、気を抜くと、AとRとかいろんな文字が誤認識される。ここは基礎からみっちり練習する必要がある。
■ご参考URL
http://a1club.net/knowhow/st-key.htm
A1Club 縦ぶり電鍵の打ち方 by JA1VJQ
http://a1club.net/knowhow/ele-key.htm
初心者向けエレクトロニックキーヤ−の使い方