文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 電子ボリューム ====== ===== 概要 ===== 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}} ===== ソースコード ===== <code c lc75366.c> //********************************************************************** #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]); } } } //********************************************************************** </code> ===== 動作確認 ===== いつものようにブレッドボードで動作確認です。 見えにくいですが、緑色の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Ωの負荷)が影響を与えてしまうためです。 外付け部品も少なく、価格も安いのでちょっとしたラジオ、アンプのボリュームには適当かと思います。 <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖した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]] </callout> elechobby/picdic/pic12f683/6.txt 最終更新: 2025/10/17 14:29by 127.0.0.1