2012年2月13日月曜日

arduinoで電子ボリューム(NJW1159)を使う

真空管アンプ2号機の製作の前に・・・
「今度のアンプは電子ボリュームにしよう!」と思い立って買ったNJW1159Dの存在を思い出し、とりあえずいじってみました。


相変わらず買ってから使い方を探す。悪い癖ではありますがいい勉強にはなってますw




←秋月で売っている電子ボリュームNJW1159


<ICの説明>
・3線シリアル通信でボリュームを左右別々に0 ~ -95dBまでの範囲で操作。
・ピップセレクトによりを最大で4つのICを同時に使用可能。
・出力端子を二種類持ち、内蔵のアンプもしくは外部アンプを接続して使用する。
・正負両電源が必要。±4.5Vから動作。

<arduinoとの接続>
NJW1159は3線シリアル通信なのでボリュームを操作します。なのでarduinoではSPIを使います。
arduino---NJW1159 (ピン番号)
   13-----CLOCK (14) 
   11-----DATA  (13) 
   10-----LACTH (15) 
















arduinoに2つのタクトスイッチをつなぎ、5番ピンがアップ、4番ピンがダウンです。

今回はテストなので内蔵のアンプを使用しています。また、入出力には1uFのコンデンサを挟みます。

両電源が必要なので今回は外部電源を用意、10V出して、抵抗とコンデンサで仮想GNDを作ってarduinoと共有させます。


<サンプルコード>
#include 
/*
NJW1159 | arduino
CLOCK   |  13
DATA    |  11
LACTH   |  10
*/


void setup(){
 pinMode(4,INPUT);  //ボリューム操作用ピン設定
 pinMode(5,INPUT);  
 
     SPI.begin() ;                        // SPIを行う為の初期化
     SPI.setBitOrder(MSBFIRST) ;          // ビットオーダー
     SPI.setClockDivider(SPI_CLOCK_DIV16);// クロック(CLK)をシステムクロックの1/4で使用(16MHz/8)
     SPI.setDataMode(SPI_MODE2) ;         // クロック極性0(LOW) クロック位相1()
     delay(1000) ;  
}

int i = 128;

void loop(){
  byte valR,valL;

  if(digitalRead(5)==HIGH) i -=1;          //ボリュームを上げる
  else if(digitalRead(4) == HIGH) i +=1;   //ボリュームを下げる
  i = constrain(i,0,128);

  digitalWrite(10,LOW);                    //右側ボリューム
  SPI.transfer(i);
  SPI.transfer(B00000000);
  digitalWrite(10,HIGH);
  
  delay(10);
  digitalWrite(10,LOW);                    //左側ボリューム
  SPI.transfer(i);
  SPI.transfer(B00010000);
  digitalWrite(10,HIGH);
   
  delay(50);
}

<動画>















<使用感>
ブレッドボードで使用した限りではしっかりと音量調整できていました。ただ、少しノイズがのってしまっていました。おそらく基板にしっかりと半田付けすればなくなると思います。


追記:
内部アンプを使用した際にはノイズはほぼありませんが、外部アンプを使おうとすると音量の変更時にクリックノイズが入ります。


0 件のコメント:

コメントを投稿