EVC(電子ボリューム)をリモコン化改造を検討する、の巻き 2021.1.1
EVCをつかっているアナログのアンプ基板は何種類かリリースしています。改めて数えてみると下記がありました。
リリースの新しい順に並べていますが、赤外線リモコンが使えるのは一番新しいEVC72320Tのみです。
、
・EVC72320T(マルチアンプ用、赤外線リモコン対応)
・EVC1972T(マルチアンプ用)
・HPA6120(ステレオ、ヘッドホンアンプ)
・Precision Evol HPA(ステレオ、ヘッドホンアンプ)
・HPA1972mk2(ステレオ、ヘッドホンアンプ)
・EVC1972(ステレオ、コントロールアンプ)
・EVC1159(ステレオ、コントロールアンプ)
・高精度電子ボリューム(ステレオ、コントロールアンプ)
その中で、去年の年末にこんな投稿をいただきました。
電子ボリュームに限らず、リモコンがつかえれば便利なシチュエーションは色々とでてきます。
そういった用途を見越してか、ポテンショメータをモータで動かすリモコン化ユニットも売られているようです。
昨年末にこんな投稿をいただきました。
こんなリモコン化キットも売られているようですね。便利かもしれませんね。
スマートに行うには
上記のようなリモコン化キットを追加するのも1つの手ですが、一番スマートにしようと考えれば、もともとEVCに付属しているPICコントローラを
赤外線対応にすることででしょうか。ということで、ここではEVCの赤外線リモコン化改造を検討してみましょう。ちょうど、冬休みの工作にいいかもしれません。
まずは簡単にFS
まずは実現可能かどうかを簡単にFSです。
1)赤外線受信モジュールはどこにつける?
これは、VRがとりついている端子を活用すればいいでしょう。
2)赤外線リモコンはどうする?
これは使っていないリモコンなどが、家には何個か転がっているでしょうからそれらが使えるようにしましょう。
なくてもジャンク屋にいけば2〜300円で買うことができますからね。
このためには、リモコンの学習機能を付加することが必要です。
3)PICの容量は足りるか?
赤外線リモコンの学習機能を入れると、結構なプログラムの容量を必要とします。
ちなみに赤外線リモコンの学習機能を有するスピーカ切替基板につかっているPICのプログラムのバイナリーは約2.6kBです。
スピーカ切替基板に一番最初に赤外線リモコン機能をのせたと思います。
EVCシリーズにつかっているPICの基本は18PinのPIC16F819ですが、これは2kBの容量しかありませんので、これは使用できません。
それに、内部クロック8MHzなので赤外線コードのソフト処理にはかなり無理があります。
ということで、高速動作が可能でプログラム容量も大きいPIC16F1827(32MHz、4kB)をつかえばいいでしょう。
4)PICのI/O端子に余裕はあるか?
リモコンの学習をさせるためには、そのモードになるように設定するスイッチあるいはジャンパーピンが必要です。
さらに、リモコン学習の状態を表示するLEDも必要でしょう。さらに、EVCの動作モードがVRの使用か、赤外線の利用かを
選択するジャンパーも必要です。ということで、最小でも3本のI/Oが追加で使える必要があります。
さらにプログラムに余裕があればロータリーエンコーダもつかえるようにしたいところです。というのも、赤外線リモコンが使えるようにしても、
肝心のリモコンが見つからないときが多々あります。そのときは、手動で音量調整になるのですが、手動調整用としてはVRはリモコンとの
共存が難しいので不向きです。共存するなら、インクリメンタルでボリューム調整ができるロータリーエンコーダになってしまいます。
さて、ロータリーエンコーダを使えるようにするとなると、さらにエンコーダ用に2本、そして音量調整切替用にさらに1本のI/Oが必要になり、
合計で6本のI/Oが追加で必要です。
そこで、現状のEVCでのPICプログラムで使用しているI/Oを確認しました。
未使用 | 1 | A2 | A1 | 18 | 電圧モニター | ||
未使用 | 2 | A3 | A0 | 17 | VR入力 | 赤外線入力 | |
未使用 | 3 | A4 | A7 | 16 | 未使用 | ||
VDD固定 | 4 | A5 | A6 | 15 | 未使用 | ||
5 | VSS | VDD | 14 | ||||
EVC制御(DATA) | 6 | B0 | B7 | 13 | 未使用 | ||
EVC制御(CLK) | 7 | B1 | B6 | 12 | 未使用 | ||
EVC制御(LE) | 8 | B2 | B5 | 11 | 未使用 | ||
シリアルLED出力 | 9 | B3 | B4 | 10 | リレー制御 |
あらためて調べてみると、未使用端子は合計8個(VR入力も使うので実質9個)ありますので十分です。
プラットフォームを準備しましょう!
まずは開発用のプラットフォームを準備しましょう。
ターゲットとしてはEVC1159あるいはEVC1972を手始めにしようと思います。探してみると、EVC1159についてあ
実機に組み込んでしまっているので、すこし手を出すのを躊躇してしまいそう。ということで、EVC1972はまだ組み込んで
いないものがあったので、これを使うことにしました。
ちなみにEVC1159とEVC1972につかっている電子ボリュームの素子は、それぞれNJM1159(新日本無線)とLM1972(NS)で、
どちらも秋月で比較的安価に入手できました。過去形になっているのは、LM1972についてはまだ在庫がありそうですが、
NJM1159についてはすでに在庫が無くなっています。おそらくNJM1159はDIPパッケージなので使いやすかったので足が速かったと
想像しています。それに対してLM1972はSO-20の表面実装部品なので変換基板が必要になったので、すこし遠慮されたのかもしれません。
性能的にはどちらもほぼ同等でしょう。値段的にはNJM1159の方が安価でした。
EVC1159は実機に組み込んでいるので、すこし改造は後回しにしましょう。
EVC1972は基板単体であるので、これをターゲットにしましょう。
赤外線リモコン用の改造!
改造の前に、まずは念のため現時点で動作の確認をしておきます。可変抵抗とLED表示器を接続して
動作することを確認です。問題ないようないで、いくつか改造をしていきましょう。
まずは現状で動くかどうかを確認です。
1)ICSP用のPICを作成
プログラムは何度も書き換えすることが想定されるのでICSP(In-Circuit Serial
Programing)ができるようにPICに
端子を接続しておきます。PICには4kBの容量のあるPIC16F1827を使います。
PIC16F1827にICSP用の端子を取り付けておきます。ピンの固定用の樹脂が動かないように、ホットメルトで固定です。
PICのMCLR端子はPICプログラムのときに使うので、切り離しておきます。
2)スイッチの取り付け
スイッチを押しながら電源を投入しいたら、リモコンの学習モードになるようにしたいので、
基板からリード線を取り出してスイッチをとりつけます。基板の半田面には機能拡張を考えて
パッドが設けてあったので、そこからリード線が接続しました。
外部スイッチ用のリード線を取り出します。
3)IR受信モジュールの取り付け
最後にIR受信モジュールの取り付けです。IR受信モジュールのピンは向かって左から、
SIGNAL、GND、VCCになっているので、これをVCC、SIGNAL、GNDに並び換えて基板に接続です。
IR受信モジュールを取り付けます。
これで、開発用のプラットフォームは完成です。あとはシコシコとプログラムを書いていきましょう。
開発用のプラットフォームが完成です。ロータリーエンコーダは後ほど。
ソフトを書いていきましょう!
その前に簡単に仕様を検討です。
ボリューム調整・・・・ 1dB毎(MUTE、-78dB〜0dB) (LED表示は0〜80としてVR操作時にあわせる)
リモコン操作・・・・・ ボリュームUP、ボリュームDOWN、MUTE-ON、MUTE-OFFの4キーを割りあて。
ボリューム値記憶・・・ 設定値はEEPROMに記録し、再電源投入時に再現すること。
まずはこんな感じとしましょう。リモコンの長押しによるリピートはリモコン送信機の機能にまかせます。
というのも、国内の一般的なリモコンではキーを押すと約10回/秒の頻度で同一コードを送信してくれます。
コア部分は完成?
ほぼコアになる部分は完成です。コア部分は赤外線リモコンの学習モードと、リモコンの使用モードの、そしてVR使用モード
の3つのモードです。あとはエンコーダの追加ですが、これはさほど難しくないでしょう。ただ、EVCについては色々な基板があるので、
できるだけ汎用性を持たせたいのと、操作性の改善からもう少し追い込みが必要そうです。
追い込みが必要なところは下記点です。
1.赤外線リモコンからの単ステップ入力
赤外線リモコンのボタンを押すと、押している間は約100ms間隔で同じコードが送出されます。これ自身はキーの長押しと同じなので
気にすることはないのですが、反対に1ステップずつ動かすのが難しいです。実験でつかったSONYのリモコンだと、1回押すと最低でも3回コード
が送出されます。そうなると、いきなり3レベル変わります。音量にすると3dBです。ちょっと3dBは大きいかもしれません。1回押すと1dB毎
でわるようにして、長押しすれば連続的に動くようにしたいものです。これを実現するためのプログラムフローをどのようにしようか、
考え中です。
2.音量コードの割り当て
リモコンあるいはエンコーダでの操作については0〜80の81ステップにする予定です。0はMUTE状態、80は減衰0dBは決まっているのですが、
その間の音量コードの割り当てについては、操作感にかかわる重要なところです。ところが、EVCの音量コードと減衰量の関係は素子によって
バラバラです。現状では、サブルーチン内にて複数の折れ線で変換していますが、EVC毎に計算式を考えるのも面倒です。操作ステップが81程度なので
データテーブルとして持たせた方が汎用性がありそうなのですこし改造を進める予定です。
ちなみに、EVCの素子での音量コードと減衰量の関係は下表のようになっています。
素子名 | 音量コード | 減衰量 | 減衰ステップ | 備考 | |
NJM1159 | 0x00〜0x5F 0x7F(MUTE) |
0dB 〜 -95dB MUTE |
1dB | すべて1dB毎なので使いやすい | |
LM1972 | 0x00(0dB)〜0x60(-48dB) 0x60(-48dB)〜0X7E(-78dB) 0x7F(MUTE) |
0dB 〜 -78dB MUTE |
0.5dB ( 0dB〜-48dB ) 1dB (-48dB〜-78dB) |
-48dBでステップが変わるのが面倒。 | |
MUSES72320 | 0x10(0dB)〜0xEF(-111.5dB) 0x00(MUTE)、0xFF(MUTE) |
0dB 〜 -111.5dB | 0.5dB (0.25dB毎も可) |
無駄に減衰量が大きい(ほとんど使わない領域) |
EVCの減衰で-40dB以下はほとんど使う領域ではないので-70dB以下はMUTE、-70dB〜-40dBまでは粗く、そして-40dB〜-10dBについては1dB毎、
さらに-10から0dBについては可能な素子については0.5dBのステップの設定でしょう。
3.表示はどうしよう?
それにしてもリモコンやエンコーダ操作のときに表示器はどうしようか悩みます。VRの場合だったらボリュームの位置情報がありますが、リモコンや
エンコーダだとなにも表示がなくても大丈夫だろうか?それに、赤外線の学習もブラインド状態になりますから、正確に学習できたかどうかも心配になります。
とりあえず2桁LEDがあればいいのですが、なくても操作上問題ないかは実際に操作しての感触から考えましょう。
プラットフォームを変更 2021.1.8
色々なテストをするためにも、プラットフォームを引越しです。EVC基板をブレッドボードに搭載して、エンコーダやスイッチを取り付けられるようにしました。
ブレッドボードにすることで、音量調整用のVRと赤外線受光モジュールの取替えが簡単になります。
プラットフォームを引越しです。
ボリューム調整用のVRとリモコンモジュール。
減衰曲線を作成
LM1972を赤外線あるいはエンコーダでつかう場合の減衰曲線を作成です。曲線ではなく、折れ線ですね。
LM1972での減衰量の曲線です。
EEPROMの書き込みは?
赤外線リモコンを操作したときや、エンコーダを回したときの値はEEPROMに記録するようにします。
ちなみにEEPROMの書き換え可能な回数は最小10万回が保証され、標準では100万回です。
なお、実際にどこまで書き換えができるかをテストされた方もおられるようで、1200万回まで
耐えたという記事もあります。
たとえば10万回だとして、1日エンコーダを10回転(240パルス)させることを毎日行うと、416日は大丈夫な
ことになります。ちょっと短いかな?せめて10年くらいは最低でももたないとだめですよね。
ということで、エンコーダを回している最中にはEEPROMには書き込みせず、回し終わったあとに
数秒たったらEEPROMに書き込むようにしましょう。そうすれば、EEPROMの書き込み回数については
グッと減りますから寿命については気にする必要はなくなります。
もうひとつEEPROMの書き込み回数を抑えたい理由としては書き込み時間が5ms程度と結構かかるので、
エンコーダの接点読取りなどをミスする可能性もなくはないので、それを避けるためです。まあ、そこまで
高速にエンコーダを回すことはないとは思いますが・・・・。
完成! 2021.1.9
ようやくソフトが完成しました。
忘れないうちに、使用方法のメモを作成です。
1.設定はJP1〜JP3を使用
EVC1972とEVC1159の半田面には拡張用のジャンパーパッドがあるので、それを設定に活用します。
EVC1972とEVC1159の半田面には拡張用のジャンパーパッドがあるので、それを設定に活用します。
JP1〜JP3の機能は下表の通り。
JP番号 | 機能 | 備考 |
JP1 | 短絡:赤外線リモコンの学習開始 |
・電源投入時に判定。 ・JP2が短絡(赤外線リモコン・エンコーダモード)時 のみ有効。 |
JP2 | 開放: VRモード(音量調整はVR)で使用 短絡: 赤外線リモコン・エンコーダモードで使用 |
・エンコーダ使用時はJP3を短絡。 |
JP3 | 開放: エンコーダは未使用(入力プルアップ不要) 短絡: エンコーダ使用 |
・JP2が短絡(赤外線リモコン・エンコーダモード)時 のみ有効。 |
具体的な設定
1.設定方法
1)VRを使用する場合
これは従前と同じです。
・JP1〜JP3はすべて開放。
・P15〜P17にVRを接続
2)赤外線リモコンのみ使用する場合(エンコーダは未使用)
・JP2を短絡。
・P15〜P17に赤外線受光モジュールを接続
・赤外線リモコンの学習時はJP1を短絡して電源投入。
3)エンコーダのみ使用する場合
・JP2,.JP3を短絡
・P16(受光モジュール入力)はVDD(P17)に接続(誤作動を防ぐため)
・PICのPiN1,2にエンコーダを接続。
4)赤外線リモコン、エンコーダの両方を使用する場合
・JP2,.JP3を短絡
・P15〜P17に赤外線受光モジュールを接続
・PICのPiN1,2にエンコーダを接続。
・赤外線リモコンの学習時はJP1を短絡して電源投入。
2.赤外線リモコンの学習方法
学習するキーは4つ(音量UP、音量DOWN、MUTE−ON、MUTE-OFF)だけなので、学習内容のベリファイ(確認)はなしで簡単におこないます。
方法は下記の通り
・JP1を短絡した状態で電源投入
(学習開始の合図としてリレーが4回ON/OFFします。この後はJP1を開放してもかまいません)。
・リモコンを受光モジュールに向けて音量UP、音量DOWN、MUTE−ON、MUTE-OFFに割り当てるボタンをそれぞれ1回づつ押します。
(それぞれのボタンを押す間隔は1秒以上あけてください)。2桁LEDを接続している場合は、リモコンを押すたびに1〜4で表示が変わります。
・学習が完了すれば、リレーが2回ON/OFFして、EVC基板はスリープモードに入ります。2桁LEDを接続している場合は点滅を繰り返します。
・JP1を開放します。次回に電源ONした場合に赤外線リモコンが使用可になります。
学習するリモコンキーを変更する場合は、再度上記を繰り返します。
EVC1159もリモコン化改造!
ついでに、EVC1159もリモコン化の改造です。ソフトはほぼEVC1972と共通なので、NJM1159を直接コントロールするサブルーチンと
音量変換部分のテーブルを書き直すだけで済みます。
もう一枚、EVC1159を作成しました。素子は実機から借用です。
プログラム容量は3kB弱なので、およそPIC16F1827の容量の70%弱になりました。従来のPIC16F819(2kB)では納まらなかったですね。
しかし、そろそろPICのCコンパイラとライターのバージョンアップしないと駄目かなあ〜。
とくにコンパイラは保守もしていないので、最近の大容量のPICには対応できていません。
開発環境が変わらなければいいのだけど・・・ついでだからPIC24やPIC30シリーズにも対応できるように
しようかな・・・・・とブツブツ・・・・。
ブレッドボードからお別れ 2021.1.11
そろそろブレッドボードではなく、基板に直接必要なパーツを接続して動かしてみましょう。
制御用のPICもEVC1972とEVC1159用の両方があるので、取り違えがないようにラベルも作成です。
赤外線の受光モジュールとエンコーダですが、これらは秋月で比較的安価に購入できるものを使います。
というか、使う部品ってほとんど秋月で買えるもの限定でやっているような気がします(笑。
新しい制御用PICのラベルも作りました。ベースのPICはPIC16F1827(4kB容量)です。
リモコン受信モジュールはこれを使います(2個で100円です)。
秋月で購入できるこのエンコーダが安くて使いやすいです。1個80円です。
エンコーダーの取り付け
エンコーダの取り付けにはプルアップ抵抗が必要です。これはエンコーダ側にとりつけるとVDDへの配線が増えてしまうので、
基板側に取り付けます。ちょうど、基板の配線面にとりつけられそうなスペースがあったので、そこにとりつけました。
1/4Wの抵抗だとちょっと大きいのですが、1/6Wなら近くのVDDのパッドに接続することができます。
さらにチップ抵抗なら、もっとスッキリするかもです。なお、プルアップの抵抗値は47kΩにしました。エンコーダの定格電流が0.5mA
と小さいので、すくなくとも10kΩ以上の抵抗が必要になります。
1/6Wの抵抗(47kΩ)を取り付けた場合です。ちょうど、近くのVDDのパッドに取り付きました。
チップ抵抗(47kΩ)を取り付けた場合です。足りない長さはリード線で補完です。
エンコーダは3本の足がありますが中央がGND(COMMON)なので、あとは両側のA,BをPICに接続します。
エンコーダによってはA,Bが反対の場合もあるでしょう。エンコーダを右に回したときに、ボリューム値が減少したら
A,Bを入れ替えればOKです。
エンコーダの配線は上図の通りです。
接続の詳細は・・・・
ちょっと整理することも考えて、ドキュメントとしました。
ここを参照です。 → evc_ir_kit.pdf
リリース
今後のECV1972とEVC1159については、このPICに変更します。従来のVRを使用した音量調整が基本ですが、
赤外線リモコンやエンコーダもおまけで使える遊びグッズです。なお、交換用としてPIC単体もリリースします。
詳しくはリリースのコーナを参照ください。
(おしまい?)