GPS時計に、時報機能を加えました。

正時に、短い音楽を奏でます。ちなみに時報装置のことを英語で Chronopher クロノファーというらしいです。

 

以前から作成しているPIC3和音オルゴールをそのまま転用しようと目論見ました。

 

そのオルゴールはボタンを押すと曲がスタートし、もう一度押すと曲が止まります。押さない限りずっと次々と曲が続く仕様なので、この部分を修正して簡単に完了かと思っていました。

 

さらに、一応時計なので消費電力が少ないに越したことはないと考え、一曲演奏が終わったら、演奏用PICをSLEEPモードにすることにしました。今回使用したPIC12F1822のSLEEP時の電流は20μA程度になります。

 

さて以上の修正をして実際に時報装置としてGPS時計に組み込んで見ましたが、想定していなかった現象が出ました。

曲の始まりと終わりに「ブツッ」というノイズが入るのです。オーディオON-OFF時に、みなさんも聞き覚えがあるノイズだと思います。

いままでオルゴールではこんな現象はなかったのでネットで調べてみると、ポップノイズというものであるらしいことがわかりました。

 

原因は、音源とアンプの立ち上げ順にありました。アンプが先に立ち上がり、後から音源が立ち上がると突入電流がポップノイズを発生させます。音楽が終わるときも、アンプが入った状態で音源が切れるとやはりポップノイズが起こります。

 

ポップノイズを避けるためにたくさんの人々が自分のオーディオシステムに改良を加えていることもわかりました。

いままで発生していなかったのは、SLEEP不使用でPICが常にONの状態で曲間はGOTOループで割り込みフラグ待ちをしていたから、でした。

SLEEPを使うといっきに電流が0に近づくのでポップノイズが発生してしまったということです。

 

これを解消するにはアンプを制御するしかありません。使用しているアンプ HT82V739 の仕様書を読んで安心しました。シャットダウン機能が付いていたからです。5番ピンがCE(チップイネーブル、Low-Active)になっていて、外部から制御できます。いままで使っていなかったのですが、これをPICとつなげればよいとわかりました。幸いPIC側も制御に使えるピンが1つ余っておりHW的に実現可能なことがわかりました。

 

ソフトウェア側の対応はこんな感じにしました。アンプはチップイネーブルから60msほどで立ち上がるようなので、PIC側では200ms待ちの元から作ってあったルーチンを利用しました。アンプを切ってから自身は寝る、起きたらしばらく待ってからアンプを上げる、という単純な解決策ですが、現象発生から解決まで1日はかかりました。知らないことに出会って解決するプロセスが楽しい学習です。

SLEEPはピン割り込み可にしておけば外部からの信号で復帰するので、プログラム的には単純です。

 

SLEEP不使用のときは、人がボタンを押す際に発生するバウンス(機械的な接点のON-OFF繰り返し)を考慮しなければならず少し面倒です。SLEEPなら一行書いておけば、そこでプログラムが止まったり再開したりするだけです。

 

時報装置に演奏を命じるのはGPS時計本体です。命令のタイミングは、時刻の「~時00分00秒」の瞬間になります。