chakokuのブログ(rev4)

日々のごった煮ブログです

LPC810でCW用のブザー?を作成

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
初心者向けエレクトロニックキーヤ−の使い方