右図の回路で,LEDからコールサインのモールスが発光されます。
無線家だけが理解できる,世界で1つだけのネームプレートになります。胸ポケットや襟元にLEDをつけて,ピカピカさせています。
マイコンを始めて,サンプルプログラムをPICに書き込むまでは大変でした。そして,初めての,自作のプログラムがCalleDですが,タイマーも使わない,割り込みも使わないこのプログラムは,意外と簡単にできました。
図のように,ハードウエアという程のものではなくなり,ほとんど全てがプログラムということになりますので,プログラムを載せておきます。
QRPのCW送信機をいくつか実験して,次は5W級とモービルホイップでも実用になりそうなところまで来ました。そうなると,実験用のマイクロスイッチを使った簡易キーヤーではだめで,早く,綺麗な符号を出せる電子キーヤーが欲しくなります。
そこで開発したのが,PIC12F629を使ったPickey−Eggです。
PICによるKeyで,Pickeyと呼んでください。Eggは,いずれBaby,Boy,Youth,・・・などとパワーアップしていきたいとの思いをこめて,最初にEggと名づけました。
回路は,以下の通りです。
回路概要
PIC12F629がキーヤー本体で,74HC00はサイドトーン発生用です。そして,2SC1815から無線機のキー端子に繋ぎこみます。
DOTの入力がI/O0(7pin),DASHの入力がI/O1(6pin)で,ここを接地したときにそれぞれの要求があったと判断します。
ステレオジャックにおいては,中心線がDOT,次かDASH,一番外側がグラウンドになります。
SW-1は電源スイッチ,SW-2はサイドトーン停止用です。市販のリグに使うような場合,SW-2を開くとサイドトーンが停止します。
ソフトウエアについて
次に,ごくかいつまんだフローを示し,その下に解説を記します。
1短点出力のとき
a. @で検知し,Aで「短点+1スペース」の出力を開始し,同時に符号用クロックを起動します。クロックは,1短点分の長さです。
b. Bに来たとき,一瞬だけ短点のキーを押したつもりでもまだ短点の入力は残っていて,Eに行きます。
Eでは,「短点+1スペース」出力中は,短点要求がNEXTに入れません。NEXTが空のまま,BとEを行き来してクロックを待ちます。
c. クロックが来るとCに行きます。短点の出力が終わっただけなので,Dで次に1スペースを出力させる処理をしてBに戻ります。
d. 今度は,短点キーは離れているでしょうからBの場所で,もし,短点キーを離すのが遅れていたらBとEでまたクロックを待ちます。
e. またクロックでCですが,今度は「短点+1スペース」出力完了ですので,Fに行きます。NEXTは空(ない)のでHへ。
f. Hで入力がない(さすがにこの時点では,短点キーは離れている。)ので,全てのシーケンスが終わりクロックを停止して初期状態の@に戻りま す。
連続長点出力のとき
a. @で検知し,Aで「長点+1スペース」の出力を開始します。
b. Bに来たとき長点キーは押しっぱなしですので,Eに行きます。
Eでは,「長点+1スペース」出力中は,長点要求がNEXTに入れません。NEXTが空のまま,BとEを行き来してクロックを待ちます。
c. クロックが来るとCに行きます。長点の1/3の出力が終わっただけなので,Dでまた長点の1/3を出力させる処理をしてBに戻ります。
d. 今度も,長点キー押しっぱなしですので,BとEを行き来しながらまたクロックを待ちます。
e. BECDを「長点+1スペース」の1スペース出力完了までの間行います。そして,Fに行きます。
f. NEXTは空(ない)のでHへ。長点キーが押されたままですので,ここで長点入力を検知し,新たな「長点+1スペース」の出力を開始します。
g. そして今度は,初期出力が終わったときと同じBへ戻ります。
(注) HIを削除して,FでNEXTがないとき@へ戻るようにしてもほとんど同じ動作になるのです。しかしそうすると,新たなクロック
での動作になるのですこしずつタイミングがずれていってしまいます。
通常の動作ではほとんど意味がないのですが,タイミングのずれを嫌ってHIを設けました。
短点・長点交互出力のとき
短点・長点両方のキーを押しっぱなしにしたとき,この動作になります。ここでは,短点入力が先に検知されるようなタイミングで,両方のキーがほぼ同時に押されっぱなしになったとして解説します。
a. @で検知し,Aで「短点+1スペース」の出力を開始します。
b. Bに来たとき短点・長点キーともに押しっぱなしですので,Eに行きます。
Eでは,「短点+1スペース」出力中は,短点要求がNEXTに入れません。しかし,長点要求もあるのでNEXTに長点が入ります。
一度NEXTがはいった時,NEXTの出力処理が完了するまで,NEXTへの書き込みをできなくします。
c. BECDの処理をして,Fに行きます。ここでNEXTに長点が入っていますから,Gで長点の出力処理をします。また,概略フローではわかり ませんが,NEXTを空に戻しています。そして,Bに戻ります。
d. またBECDの処理ですが,今度は「長点+1スペース」出力中なので,EでNEXTに短点が入ります。
e. これを繰り返して,短点・長点の交互出力となります。
フローチャートおよびコード
より詳しいフローチャートは,下のリンクから確認ください。フローチャートでも正確さを求めようとすると,煩雑になってしまいますので,完全正確という訳には行きません。
正確なものは,結局コードになります。
ボランティアで,子どもの科学教室のようなものに協力していますが,今年は「空を飛ぶものからの科学」をテーマとしました。その一環で紙飛行機にチャレンジしています。ストップ・ウオッチは,紙飛行機の飛行時間を0.01秒から99.99秒まで計測できるように製作しました。
子どもたちの目に優しくと思って,7セグメントLEDはマイコンでよく使われるダイナミック表示ではなく,スタティック表示としました。
細部に不満は残りましたが,十分役に立っています。
反省点
1. LED表示が暗かった。
室内で使うとLEDが明るすぎるくらいに感じるのですが,晴天の屋外で使うとかなり見にくくなりました。
2. スイッチのチャタリング対策をすべきだった。
経験から,タクトスイッチではチャタリング対策は必要ないのではないかと考えていたのですが,ピアノスイッチタイプのものでは,必要だ った様です。プリント基板を作り直す必要のない範囲で簡単な手当てはしましたが,不満が残ります。
「ド・レ・ミ・ファ・ソ・ラ・シ・ド」の音を出すのに鍵盤がいくついるか?8音ですから,2進数で考えて3個が正解ですね。ただし,実用上は「無音」の状態が必要なので,4個の鍵盤が必要になります。PIC16F648Aでこれを作ってみました。
2進数の考え方の入門用です。それでも,慣れるとある程度の曲も演奏でき,便利に使えます。
回路図
上の通りで,SW1〜SW4で8音を出させています。音程の割り振りは右上表の通りです。
なお,図が大きくなるために省略しましたが,安定化した5V電源が必要です。
完全な二進ではあまりに扱いにくいので,下の「ド」から「シ」までを二進としています。
RA1,RA2,RA3のオンオフを制御して,R1〜R12のラダー抵抗で右図のような発生音の1サイクルを8区間,5電圧に分けた波形を得ています。これは,できれば高調波を少なくしたいためです。
これをLM358のボルテージフォロワでバッファし,さらにローパスフィルタを通して,TA7368Pによりスピーカを鳴らします。
(補足)
SW1〜SW4のLEDは,購入したスイッチに組み込まれていたために点灯するようにしたもので,必要ではありません。 電源表示のLEDも必須ではないのですが,電源の切り忘れなどの経験からある方が良いと判断しました。
ラダー抵抗への出力は,はじめはRA2,RA3,RA4としたのですが,RA4はオープンドレイン出力ということで,必要な出力を得られなかったため,RA4をRA1に振り替えました。
プログラミングは,ある意味では単純作業の繰り返しなのですが結構煩雑でした。このため8音でギブアップしたような状況です。
出力波形は,正弦波に近いのでローパスフィルタは効いていると思うのですが,そこに9次か10次位かと見えるギザギザが乗っています。ローパスフィルタをあまり良く理解していないので,今の段階ではこれが限度。そのためか,トランペットのような音がスピーカから出てきます。
スイッチのチャタリングは結構あるのかもしれませんが,スイッチの組み合わせが最後に落ち着いた音階の音からしか聞こえませんから,対策不要でした。むしろ,人間の操作タイミングの方が難しいようです。
PICとフルカラーLEDを使って,ゆっくりと発光色が変化していく[ゆったり灯」を作ってみました。
これを,和紙の円筒形のカバーの中に入れると,癒しの光という感じになります。また,クリスマスのサブイルミネーションやお雛様のぼんぼりなどにも使えそうです。
小型化するために,12Vの単5電池を使わざるを得ませんでした。この電池は,仙台では極端に高くなるのですが,仙台近辺の家電量販店でも入手可能なので採用しました。
なお,プログラム中のレジスタRep_outerにより,点灯周期を変化させることができます。