shino's bar

お家で使うLinux tux

PICマイコンで作るリモコン電子ボリューム (前編 )

21 May 2007 (初出)

自作オーディオアンプに組み込んだ赤外線リモコン電子ボリュームの製作記です。 送信器は市販のリモコン送信器を使い、自作アンプの音量を調整するものです。 全体のコントロールにはPICマイコン入門の定番PIC16F84Aを使い、C言語でコーディング、フリーのCコンパイラSDCCを使いました。

--> リモコン電子ボリューム 後編

プロローグ

オーディオアンプくらい自分で作れるさ

我が家にスピーカーがころがっていた。 友人から貰ったのだが、残念ながら我が家には外部スピーカを接続できる機器がない。 さしあたりテレビに音声出力端子はあるが、アンプがないとこのスピーカが鳴らせない。 それで使うあてなく置いてあったのだが、 それではもったいない。オーディオアンプを買ってくれと息子にせがまれた。

「アンプぐらいなら作ろうか?」
「えー、そんなもの自分で作れるの?」

何のことはない。オーディオアンプなどICひとつで済む時代である。 オーディオマニアには眉をひそめられるかもしれないが、 私の持論では音質をほとんど決めてしまうのはスピーカーであって、アンプの役割りなどしれたものである。 もっと言えば部屋の環境のほうが大事かもしれない。 我が家のリビングでアンプにそれほど凝ってもしかたがないと思ったものである。

テレビの音声出力端子から増幅するので、パワーアンプだけでよい。 カーオーディオ用のICに手ごろなものがあった。 あとは電源が問題だが、これには大容量のスイッチング式のACアダプタが特価で売り出されていたので、それを購入した。

ここへきてふと気が付いた。...ボリュームが要るよなあ。 とりあえずAカーブ(回転角度と抵抗値の関係にA,Bなどがあるがオーディオ用ボリュームはA特性)2連ボリュームがあったので、これを使うこととした。 しかしすでにこのときから、私の胸にはイヤな予感があった。

アンプはできたのだが

ICひとつ、外付け部品も数えるほどとはいうものの、入出力ターミナルやらボリュームやらと、 半田付けの点数はやたらと多い。 ようやく組み上げて通電する。 スピーカーからは素晴しい音が流れ出した。 息子は大喜びし、親父の株は大いに上がったのである。 しかし、その栄光は3日と続かなかった。

「ボリュームを触るのにいちいちアンプのところに行くのが面倒くさいのだけれど。 リモコンでできるようにならないの?」
「そう言われると思ったよ。」
「予想していたってことは、リモコンの付いていないこのアンプは習作ってこと?」

確かに、アンプにはボリュームが、ボリュームにはリモコンが付き物なのである。 未完とまで言われてはしかたがない。やるとするか。 こうして私の苦難の日々が始まるのだった。

構想

リモコン送信器

AV system

我が家のAVシステムは図のようになっている。 テレビセットの外部入力には DVDも再生できるネット・プレーヤー AVeL LinkPlayerが接続されている。 テレビセットにはAV出力端子があって、音声は自作アンプを通して外部スピーカーを鳴らす。 テレビセットの音量調節は最小にして、内蔵スピーカーが鳴らないようにしている。 今回、自作アンプに電子ボリュームを付け、赤外線リモコンでこれを操作しようという寸法だ。

リモコン送信器RC1はLinkPlayerの、RC2はテレビセットにそれぞれ付属のリモコンである。 新しく自作アンプのボリュームを操作するリモコンの送信器RC3には、市販のものを使うこととした。 各メーカーのコードが内蔵されて切替えできるものがある。これを使って、 LinkPlayerやテレビセット(松下製)と競合しない、他のメーカーのコードを使うこととする。

これではリモコンが3つもあって、またそれぞれに音量調節のボタンがあるので、混乱する。 最終的には3つのリモコンのコードを1つの学習リモコン(SONY製RM-PL500D)に覚えさせることで集約している。

リモコンボリュームの構成

block diagram

電子ボリュームは東芝製のTC9210Pというものである。 マイコンから3線のシリアルでボリュームの設定値を書き込むものとなっている。 赤外線信号の受信センサは、受光素子とアンプと38kHzの搬送波を検波するものがICあるいはユニットとして入手できる。

リモコン送信器からの音量アップ/ダウンの信号を受けて、ボリューム値を上下させ、電子ボリュームにそれをセットする。 現在のボリューム値を何らかの形で表示しなきゃいかんだろうということで、 レベルメーターなどに使われる7素子のLEDバーをその表示とした。

余分かもしれないが、リモコンを使わなくても、ツマミを回すことでも音量調節できるようにした。 これにはロータリーエンコーダを用いている。エンコーダからはA/B 2相の信号が出る。

電源を切ったときに、それまでのボリュームの値を保持し、次に電源を入れたときにその値を復帰させるようにした。 アンプ用の15V電源を貰って定電圧ICによりマイコンの電源5Vを作り出しているが、 15V側の電圧が低下したとき、電圧検知ICから信号が入る。 電圧低下信号が入るとアンプ側をスタンバイ状態にして消費電力を抑えるとともに、 マイコン自らもLEDを消灯したうえで、現在のボリューム値をマイコンに内蔵のEEPROMに書き込む。 書き込み中はマイコンはスリープ状態に入り、EEPROM書き込み以外の消費電力は最小となるよう努める。

マイコンの選定

世にマイコンはいろいろあるようだ。 私には初めてのマイコンということで、何にするか迷ってしまう。 インターネットで、また本屋で眺めてみるとPICの解説書がいちばん多いことに気付く。 これには歴史が関係しているだろう。 Microchip社のPICはワンチップ・マイコンでは草分けの存在だ。 後発のものはそれだけ機能面などで優れているものもあるだろうが、解説資料が豊富という理由でPICを採用することとした。

PICにもいろいろあるが、自作用としてPIC16F84またはPIC16F84Aが定番のようだ。 これも古い品種で、いまはもっと機能が高くて安価なものもあるのだが、やはり資料が多いということ、開発ツールには新しいデバイスに対応していないものもあるということでこれを採用する。

PICの開発ツールは安価に入手できる。 プログラム開発には当初アセンブラを覚悟していたが、フリーのCコンパイラもあるので、C言語で開発することとした。

ハードウェア

Hardware

ちょっと困ったことがある。 PIC16F84AのI/Oピンはピンごとに入力/出力が選べて、全部で13。 ところが必要な入出力を数えると15ある。2つ足りない。

そこで、ロータリ・エンコーダからの入力(A相/B相の2つ)と、 電子ボリュームICへのデーター出力のうちDATAとCKの2つとを兼用することとした。 PIC16F84Aの各I/Oピンを入力にするか出力するかはプログラムでも切替えができる。 この2つのピンを普段は入力に設定しておき、 ボリューム値の変更すなわち電子ボリュームICに設定が必要なときに、この2つのピンを出力として設定する。 電子ボリュームICへの書き込みは数十usで終わるので、また入力に切替えておけばよい。

この2つのピンが入力設定のとき、 ロータリ・エンコーダからの入力は電子ボリュームICのDATAとCKにも加わる。 しかしICへの書き込みにはSTB信号が必要であり、これをLowに固定しておればDATAとCKに何が入ってもこれを無視する。 図示していないが、STB信号のほうは抵抗を介してGNDへプルダウンしており、 マイコンがリセットされたときにもSTB信号はLowに維持されるようにしている。

全体の回路はおおよそ図のようになる。 オーディオ回りは+15V、マイコン制御回りには+5Vを供給する。 +5V電源の低下によりリセット信号が、 +15Vが低下するとメイン電圧低下信号がマイコンに入るようにしている。 LEDの電流制限抵抗にはDIL形の抵抗アレイをソケットに挿入して実装した。 抵抗アレイを差し替えることでLEDの明るさを調整できる。 クロックは水晶振動子により20MHzとしている。

→ 後編へつづく

関連ページ

ネット上の参考情報

ご意見、お問い合わせは Linux掲示板


shino's bar goto [シノバー店内案内] [お家で使うLinux]