====== 電子ボリューム ======
===== 概要 =====
SANYOの2チャネル用電子ボリューム(LC75366)をPICで制御してみました。
千石電商で250円で販売していました。
LC75366は、ボリューム、 バランス、ラウドネスの各機能をシリアルデータ入力によりコントロールできる電子ボリュームです。<0dB ~-68dB(2dB ステップ)、36 ポジション>
===== 動作原理 =====
PICにより、10dB、2dBのステップを制御(プッシュSWによりUP/DOWN)します。
L10dBのボリュームは、約80k、L2dBのボリュームは、約20kです。
{{:imgpaste:202004:htmikan-20200428-155154.png}}
これは下図のような回路に概ね等しい事になります。
* 【A】は、L10dBOUTとL2dBINを直接に接続した場合です。
* 【B】は、L10dBOUTとL2dBINの間にバッファーを挿入した場合です。(本来はこれがお勧めです)
{{:imgpaste:202004:htmikan-20200428-155239.png}}
PICから制御する時のタイミングチャートです。3本(CE、DI、CL)でアドレス、データの20ビットをシリアルに送信します。
(B0、B1、B2...D11の順に送信)
{{:imgpaste:202004:htmikan-20200428-155314.png}}
このICは、同一バス上に2個接続できます。その個々の認識はアドレスコードにより行います。
ラウドネスのON/OFFも出来ますが、今回はOFFとして使用しました。
Rch、Lchは同時に制御することも、個別に制御することも出来ます。これにより左右のバランスを調整することが出来ます。
{{:imgpaste:202004:htmikan-20200428-155355.png?500}}
===== 回路図 =====
{{:imgpaste:202004:htmikan-20200428-155649.png}}
===== ソースコード =====
//**********************************************************************
#define CE GPIO.F0
#define DI GPIO.F1
#define CL GPIO.F2
#define swUp GPIO.F3
#define swDown GPIO.F4
#define LED GPIO.F5
//**********************************************************************
void interrupt()
{
if (PIR1.TMR1IF == 1) {
PIR1.TMR1IF = 0;
LED = ~LED;
}
}
//**********************************************************************
void dataOutput(unsigned char di)
{
if (di == 1)
{
DI = 1;
CL = 1;
asm nop;
asm nop;
CL = 0;
} else {
DI = 0;
CL = 1;
asm nop;
asm nop;
CL = 0;
}
}
void volumeDataSet(unsigned char vd)
{
unsigned char i;
CE = 0;
dataOutput(0);
dataOutput(0);
dataOutput(0);
dataOutput(1);
dataOutput(0);
dataOutput(0);
dataOutput(0);
dataOutput(1);
//
CE = 1;
for (i = 0; i < 8; i++) {
if (((vd >> i) & 0x01) == 1)
dataOutput(1);
else
dataOutput(0);
}
dataOutput(1);
dataOutput(1);
dataOutput(0);
dataOutput(0);
CE = 0;
}
//**********************************************************************
void main()
{
static unsigned int ad0;
static unsigned char volumeCnt;
static unsigned char volumeData[36] = {
0b00000000,
0b00010001, // -68db
0b00100001, // -66db
0b00110001, // -64db
0b01000001, // -62db
0b01010001, // -60db
0b00010010, // -58db
0b00100010, // -56db
0b00110010, // -54db
0b01000010, // -52db
0b01010010, // -50db
0b00010011, // -48db
0b00100011, // -46db
0b00110011, // -44db
0b01000011, // -42db
0b01010011, // -40db
0b00010100, // -38db
0b00100100, // -36db
0b00110100, // -34db
0b01000100, // -32db
0b01010100, // -30db
0b00010101, // -28db
0b00100101, // -26db
0b00110101, // -24db
0b01000101, // -22db
0b01010101, // -20db
0b00010110, // -18db
0b00100110, // -16db
0b00110110, // -14db
0b01000110, // -12db
0b01010110, // -10db
0b00010111, // -08db
0b00100111, // -06db
0b00110111, // -04db
0b01000111, // -02db
0b01010111, // -00db
};
//
OSCCON = 0b01110000; // クロックは8Mhz
CMCON0 = 0b00000111; // コンパレータは使用しない。
ANSEL = 0b00000000; // A/Dを使用しない。
TRISIO = 0b00011000;
GPIO = 0b00000000;
OPTION_REG = 0b00000000;
PIE1.TMR1IE = 1;
PIR1.TMR1IF = 0;
T1CON = 0b00000001;
INTCON = 0b01000000;
T2CON.F0 = 0;
T2CON.F1 = 0;
//
WPU.F3 = 1;
WPU.F4 = 1;
//
volumeCnt = 25; // -20db
volumeDataSet(volumeData[volumeCnt]);
//
INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。
//
while (1) {
if (swDown == 0) {
while (swDown == 0)
Delay_ms(10);
if (volumeCnt > 0)
volumeCnt--;
volumeDataSet(volumeData[volumeCnt]);
}
if (swUp == 0) {
while (swUp == 0)
Delay_ms(10);
if (volumeCnt < 35)
volumeCnt++;
volumeDataSet(volumeData[volumeCnt]);
}
}
}
//**********************************************************************
===== 動作確認 =====
いつものようにブレッドボードで動作確認です。
見えにくいですが、緑色のSWがDOWN、黄色のSWがUPです。
{{:imgpaste:202004:htmikan-20200428-155835.png?500}}
0dB{{:imgpaste:202004:htmikan-20200428-155858.png}} -2dB{{:imgpaste:202004:htmikan-20200428-155910.png}}
-4dB{{:imgpaste:202004:htmikan-20200428-155923.png}} -6dB{{:imgpaste:202004:htmikan-20200428-155936.png}}
-8dB{{:imgpaste:202004:htmikan-20200428-155949.png}} -10dB{{:imgpaste:202004:htmikan-20200428-160000.png}}
-10dBで極端に低下しているのはバッファーを省略したからです。
つまり、10dBのボリュームに2dBのボリューム(20kΩの負荷)が影響を与えてしまうためです。
外付け部品も少なく、価格も安いのでちょっとしたラジオ、アンプのボリュームには適当かと思います。
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]