ゆけッ! やっせんぼ・とよちゃん!
電子ボリュームの自作記録
(2012年09月15日 更新、2015年08月14日 改修)
どして?
オーディオプロセッサ ver.2.x を開発してからお蔵入りしてしまっていた電子ボリューム ver.1.0ですが、今回 ちょっとした事情により(笑) ver.1.2 として復活させることにしました。
基本機能
前回公開の ver.1.0 と重複になりますが、基本的な機能としては、
とう感じです。
代表的なアッテネータ TC9210 と LM1972/3 は -80dB までアッテネーションできます。 50段階のレベルがあれば十分だと思います。
アッテネーションレベルは常に減衰方向なので、マイナス(-)符号は表示しないことにしました。
ボリュームのコントロールは、赤外線リモコンとロータリーエンコーダーで変更できるようにしました。
ver.1.0 からの変更点は、
の3点です。
入力の 120Ω はあまりにもインピーダンスが低すぎて 繋がらない機器があったので、インピーダンスを上げました。(笑)。 -6dB のレベル調整が必要な原因は、LM1973の歪みが酷いからです。(2015年08月14日 確認)
ボリュームの上げ下げだけであり、世の中の殆どのリモコンでは(おそらく)ソニータイプのコードを使用しているので、学習機能を廃止して ソフト的にシンプルにしました。
リモコンコードの定義は、infrared.h というファイルに
#define IR_CODE_UP 0x00000490
#define IR_CODE_DOWN 0x00000c90
#define IR_CODE_MUTE 0x00000290
#define IR_CODE_P1 0x986708f7
#define IR_CODE_P2 0x98678877
#define IR_CODE_P3 0x986748b7
#define IR_CODE_P4 0x9867c837
#define IR_CODE_P5 0x986728d7
と定義されています。 お手持ちのリモコンと合わない場合、適当に変更してください。
ハードウエアデザイン
ハードは、上記の 120Ω の抵抗の変更とグランドの修正点以外、基本的に ver.1.0 をそのまま使用しています。
PIC16F88 のポートのアサインは、改めて記述すると このようになっています。
PORT NAME | Input/Output | Function |
---|---|---|
RA0 | O | Seven segment selection (lower digit) |
RA1 | O | Seven segment selection (higher digit) |
RA2 | I | Rotary encoder phase A |
RA3 | I | Rotary encoder phase B |
RA4 | O | LM1973 Load/Shift |
RA6 | O | LM1973 Data |
RA7 | O | LM1973 CLOCK |
RB0-6 | O | Seven segment control (a-g) |
RB7 | I | IR receiver PL-IRM0101-3 |
ソフトウエアデザイン
基本的な機能は
という感じです。
タスクスイッチング機能は、便利なので 改良版に差し替えました。
システムクロックは内部の発信器を使用します。 発振周波数は 8MHz です。
TIMER0 割り込みは 2ミリ秒に設定され、タスクスイッチングに使用されます。
TIMER1 はフリーランカウンターに使用されます。 カウンタ(16ビット)は TIMER1 割り込みを使用して 更に 8ビット 拡張されています(内部的には全部で24ビット)。 4マイクロ秒毎にカウントアップされ、約60秒まで計ることが出来ます。
ロータリーエンコーダーは、単純に一定間隔で ポートAをモニタリングすることにより制御されます(詳細はソースコード rotaryencoder.c を参照)。
赤外線受信素子 PL-IRM0101-3 からの信号は、ポートBチェンジ割り込みと TIMER1 フリーランカウンタを使用して解析します(詳細はソースコード infrared.c を参照)。
結論
前回 ver.1.0 を公開した時は、初めて PIC を使用しての電子工作だっので 何かと問題が多かったのですが、今回のバージョンでは かなり安定して動くものになっていると思います。
改めて完成品です(同じ写真ですいません)。
黒い押しボタンスイッチが付いたままですが、今回のバージョンでは 使用していません。
リファレンス
ボリュームコントロール関連:
PIC 関連:
Welcome to Einstein's electronic lab!
開発環境関連:
MPLAB Integrated Development Environment
SDCC - Small Device C Compiler
赤外線コード関連:
PIC のアセンブリ言語を知りたければ:
ダウンロード
ソースコードのダウンロードは ここ をクリックしてください。
私の開発環境(MPLAB V8.70 + SDCC V3.0.0 を使用)を圧縮したものです。 使用する場合、適当に変更してください。