2016年1月31日日曜日

オーディオ用DACを使ったファンクションジェネレータの構成(メモ)

構成案


ノイズ対策のためにI2C LCDの電源をON/OFFする。MOS-FETのスイッチを使う予定だが、以前、MOS-FETのスイッチで痛い目にあったので(「矩形波だけのファンクションジェネレーター でけた」の「MOS-FETのスイッチング」)実験して問題があるようなら物理的なスイッチに変更する。

その場合もLCDがOFFなのを検知してLCD表示用のI2C通信を停止するためにPSoC 5LPに電圧検知用のラインを1本。

LEVEL調整用のPOTはPCM5102Aからの出力を減衰させる。PCM5102Aの出力に入れられるRは1kΩ/Minなので10kΩ程度?

ACTIVE LPFはオペアンプを使ったLPFで100kHz以上の波形の崩れを整形。2次~3次で効果があるか確認。
→LPFをバイパスするスイッチ忘れてた(^q^; LPFをバイパスしてPOTから直接出力するとPCM5102から見た負荷抵抗がPOTの抵抗値以下になるので要注意。

PCM5102Aはチャージポンプで負電圧を作り出しているので、GNDは普通にGNDとして扱って良いはず。

PSoC 5LPには水晶振動子でシステム・クロックを与えて精度を上げる。調べると24.576MHzという(中途半端な周波数の)水晶もあるようなので仕入れて使ってみる予定。

KeyPadは8線。(Pull Down用のRが4本必要)

電源部は±4.5Vで、プラス側だけ3.3VのLDOでAVDD/DVDDの3.3Vを供給。
→3.3Vで安定しない原因を調べる

±4.5VはOPAMP用。負側正側の電池だけ減るの早そう(^q^;

ADCによる出力電圧の測定はサイン波なので正確に測定できないと思うのでパス。

部品並べ


I2C LCDはサイズを節約したいので秋月のAQM0802にしてとりあえず並べてみた。

上側のユニバーサル基板はサンハヤトの288で秋月のC基板より穴の数が多い。PSoC 5LP Prototyping Kitは26Pin×2で秋月のC基板だと載らない。両端1Pinずつ殺せばもう2段下にずらせる。

下側の基板は基本アナログにしてノイズを減らしたい。

レベル調節用のPOTとロータリーエンコーダー(とりあえずPOTで代用)は側面にとりつけて、キーパッドはLCDとツマミ類と干渉しない用にケースの上面に貼り付けたい。

ケースは手持ちにあったタカチの透明ケースのPB-2

電池は内蔵するスペースがないので外付けで9VDC。→ということは±4.5Vに分圧しないといけない。

無負荷状態で70mA程度流れていたのでOPAMP、LCD、出力電流こみこみで150mAぐらいで見積もると
9V / 150mA = 45Ω
GNDにあんまり流れ込まなければ抵抗分圧でもいいが、TLE2426を使うかな。

出力はどのみち1chなので2chOPAMPの片側を使ってバッファリングするか。

PSoC 5LP Prototyping KitでPCM5102Aをサンプリング周波数384kHzで使う。

PSoC CreatorのProject
https://github.com/ryood/I2S_FG/tree/master/PSoC/I2S_FG/PrototypingKit_DDS.cydsn

PSoCのI2SコンポーネントのDATASHEETではClockの設定の項では


となっていて、192kHz/16bitまでしか選択できない様に書いてあるので仕様外かもしれない。

※WSは2ch分なのでtws=32bitsだと1chは16bitになる。

配線

PSoC 5LP Prototyping KitでPCM5102Aを使ってみる。」のブレッドボード図に周波数設定用のロータリーエンコーダをつないだ。

384kHz/24bit

CPU Clockを72MHz、I2Sコンポーネントに入れるクロックを36MHzに設定。
DMAのBUFFER_SIZEを6(byte)に設定。


ch1:SCK ch2:WS
Fsck / Fws = 17.90MHz / 373.1kHz ≒ 48
なので24bitを2ch分送信できているようだ。


ch1:SDO ch2:WS

WSがLとHで同じデータが送られているようだ。


ch1:ROUT ch2:LOUT

だいたい10kHzに設定して出力。

384kHz/32bit

CPU Clockを48MHz、I2Sコンポーネントに入れるクロックを48MHzに設定。
DMAのBUFFER_SIZEを4(byte)に設定。


ch1:SCK ch2:WS
Fsck / Fws = 23.90MHz / 373.7kHz ≒ 64
なので32bitを2ch分送信できているようだ。


ch1:SDO ch2:WS

これもOK

1kHz

ch1:ROUT ch2:LOUT

10kHz

192kHz

I2SのSCKが373.7kHzなので出力周波数がずれているが
1kHz * 373.7kHz / 382kHz ≒ 978.3Hz
10kHz * 373.7kHz / 382kHz ≒ 9.783kHz
192kHz * 373.7kHz / 382kHz ≒ 187.83kHz
なのでだいたいOKだと思う。

I2Sに入力しているクロック

47.81MHz

メモ:

波形テーブルを作るのがめんどくさかったのでとりあえず16bitのデータに下位bitを0で埋めて出力したので実質16bitのデータ。32bitに拡張しつつ予めバイト順を入れ替えておく。

Flashメモリが余っているので波形テーブルの要素数も増やしてみる。

100kHz超えのサイン波を中心に考えて出力にLPFを入れる。←三角波、ノコギリ波は妥協するかLPFをON/OFFできるようにする?

表示用に3.3V駆動のLCDを使いつつノイズにも気をつける。←これもON/OFFできるようにする?

出力レベルの調整はアナログ信号をPOTで減衰させる。←適当な抵抗値を考える。入れる場所をLPFの前段、後段で実験

出力レベルはPSoC内蔵の基準電圧とADCで測定できる?

AVDD-AGNDの電圧を測ると3.10V程度まで低下している。電源には「5V/3.3Vの安定化電源」を使っているのに電圧が低下する原因がわからない。電源からの出力電流は70mA程度。電圧安定度をオシロで見てみる?


2016年1月30日土曜日

TDA1543のI-V変換にオペアンプを使ってみる。

LTSpiceでのシミュレーションだけ。

回路図

TDA1543は「full scale output current」が2.30mA(typ.)となっているので
2.30mA × 820Ω ≒ 1.89V
ぐらいにしてみた。

OPAMPは入力インピーダンスを高くしたいのでFET入力のOPA2134にして電源はとりあえず5Vを分圧。

帰還に入れているCを100pF、1000pF、0.01uFにしてシミュレーションしてみた。

過渡解析

出力振幅は1.8Vp-p弱になっている。

AC解析

青色で見にくいですが、1000pFぐらいだとカットオフ周波数が200~300kHz前後にくるようだ。

ファンクションジェネレータとして使うのできれいな正弦波を出力したい。もう何段かLPFを入れてTDA1543+アナログフィルタでガタガタをとるのはしんどそうかな。

2016年1月28日木曜日

Arduinoで4×4のキーパッドの読み取り

aitendoで買った薄膜キーパット(4x4) をびんぼうでいいのでテスト。


キーパッドの配線は4×4のマトリックスになっている。


RowとColumnをそれぞれOutputとInputにしてスキャンしてやればどのキーが押されてるか判別できるが、びんぼうでいいののInput/Outputを直結すると判定がうまくいかない。誤判定される。

AVRのInputはハイ・インピーダンスなので(だと思う)、OutputのLがGNDに落ちてないのかな?

ブレッドボード図

10kΩのRでPullDownしたら、まあまあちゃんと読めるようになった。

Arduinoのスケッチ

static char keypadChar [] = {
  '1', '4', '7', '*',
  '2', '5', '8', '0',
  '3', '6', '9', '#',
  'A', 'B', 'C', 'D',  
};

void setup() {
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}

int keyScan() {
  int i, j;
  for (i = 0; i < 4; i++) {
    digitalWrite(i + 6, HIGH);
    for (j = 0; j < 4; j++) {
      if (digitalRead(j + 2) == HIGH) {
        digitalWrite(i + 6, LOW);
        return i * 4 + j;
      }
    }
    digitalWrite(i + 6, LOW);
  }
  return -1;
}

void loop() {
  int v;
  v = keyScan();
  if (v != -1) {
    Serial.println(keypadChar[v]);
  }
  delay(100);
}


100msのインターバルを入れているが連続入力されてしまう。チャタリングというか「押して離して」をちゃんと判定しないとダメかな?

2016年1月27日水曜日

PSoC 5LP Prototyping KitでPCM5102Aを使ってみる。

32bit/384kHzまで出せるPCM5102Aを使ってみた。

オーディオ用のDACのわりには外付け部品が少なくてすむが、気を付ける点がいろいろある。SSOP(0.65mmピッチ)なのではんだ付けも慣れてないとしんどいが、3.3V駆動で絶対定格が3.9Vなので電源電圧も気を付けないといけない。電源の逆電圧も絶対定格で-0.3Vとなっているので電源の逆接続もあぶない。

なので半年ぐらい手を付けないでいた。

データシートからわかること

I2SのDACなので基本的には電源とWS、SCK、SDの3本の入力、ROUT、LOUTの2本の出力が基本だが、20Pinにいろいろと機能が割り当てられている。


I2Sのクロックは12pinのBCKだが、別にSystem用にSCKというクロックも入力としてある。PCM5102Aには内部にPLLが入っていてSCKをGNDに落としておけばBCKからSysytemクロックを生成してくれるようだ。(3-Wire I2S)

CAPxxという名前のPinは負電圧を作るためのチャージポンプ回路用のキャパシタを入れる。

DEMPはデ・エンファシスとなっているがよくわからない。クロックの波形をいじるのかな?

FLT、FMT、XSMTは動作設定用で、LDOO、VNEGは使わなくてもよいようだ。

応用回路例


基本的にこの回路図通りに配線した。SCKは3-Wire I2Sとして使うのでDGNDに落とした。

ブレッドボード図


PSoC 5LPのプロジェクトはTDA1503用に作ったものを16bit/48kHzに設定して使った。
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_DDS.cydsn

16bit/48kHzだとI2Sのクロック(BCK)は1.536MHzにしないといけないがクロックをPSoC 5LPの内蔵クロックを使っているので設定できない。

データーシートではクロック周波数は「±4% tolerance」となっているので
1.50048MHz~1.62552MHz
でOKなのでそのままやってみた。


電源電圧(実測)
DVDD - DGND: 3.25V
AVDD - AGND: 3.22V
I2S信号

ch1:SCK(BSK) ch2:WS(LRCK)

クロックは1.5556MHzで許容範囲内。サンプリングレートは48.54kHzになっている。


ch1:SDO(DIN) ch2:WS(LRCK)

データーはL/Rで同じものが送られるはずだがちょっとおかしい?

出力波形

ch1:ROUT ch2:LOUT

1kHzのSin波が出力されているが、ch1:1ROUTの波形がおかしい。

ch2:LOUT(拡大)

LOUTはきれい。

ch1:ROUT(拡大)

ROUTは変な波形が重畳している。カーソルで測定すると(Δ43.600us/22.94kHz)だった。やっぱりI2Sのデータが変なのかもしれない。

メモ:

データを32bit/384kHzまであげられるかテストする。
384kHz×32(bit)×2(ch)=24.576MHz 
なので80MHzのPSoC 5LPではDDSの演算が追い付かないかもしれない。

PCM5102Aはデジタル・フィルタが入っているのでゆるいLPFでも波形はガタガタがなくてきれい。

384kHz出せなくてもやっぱり5102Aでやろうかな?

PSoC 5LP Prototyping KitをUSBから+5V給電しなくする

3.3V系のICを試すときKitProgから間違えて5V供給してしまわないように改造した。

改造といってもダイオードを1本外すだけだ。

「PSoC 5LP Prototyping Kit Guide」の「4.2.3 Power Supply System」に「D1を除去」するように書いてあったので試した。


本体とKitProgはピンヘッダで接続する。


D1を除去しても完全に0Vにはならないようだ。

VDDIO 1.166V
VDD   1.167V
VTARG 1.166V
RST  1.89V

RSTがHiの影響かな?

2016年1月24日日曜日

PSoC 5LPとオーディオ用DACを使ったファンクションジェネレータの構想

Github:
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_DDS.cydsn

前回、DDSで波形を生成したとき10kHzのサイン波がブレブレだったのはDMAの転送元のバッファの書き換えがI2Sの送信に追いついていないのが原因だったようだ。

バッファを2ch分でなく同一のものを参照するようにしたらブレはなくなった。

10kHz

100kHz

129.8kHz

LPFを入れていないのでガタガタはあいかわらずですが。

I2Sのクロックは9MHzにしたのでサンプリングレートは9MHz/32(bit)=281.25kHzだが、PSoC 5LPの内蔵クロックの誤差を測定してSampling Rateを279658Hzに設定した。

129.8kHzの測定はこのサンプリングレートの1/2の周波数をDDSで出力したもので矩形波になっている。

このままTDA1543でLPFを入れるか、PCM5102AにするかわからないがDDSで波形を生成する方向でやってみようと思う。

入力インターフェイス

ロータリーエンコーダーで周波数を選択するようにコードを書いたが、100kHz程度まで出力できて1Hz単位で周波数を設定するのは結構しんどいのでキーパッドとロータリーエンコーダーを組み合わせて選択することを考えてみた。


メモ:

192kHz/32bitでI2Sのクロックは12.288MHz。12MHzにするとCPUの駆動クロックは6倍で72MHz、7倍で84MHz(PSoC 5LP Prototyping Kitは80MHzでなので仕様外)。

PSoC 5LP サイン波形生成時間(メモ)

PSoC 5LP上でサイン波を生成するのにかかる時間を測定してみた。

Github
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_Realtime_Table_Gen_0.cydsn

ソースコード
 #include <project.h>  
 #include <math.h>  
 #define TABLE_LENGTH  512  
 volatile uint8 waveTable_0[TABLE_LENGTH];  
 void genSineTable(volatile uint8 *table, int length)  
 {  
   int i;  
   int16 v;  
   int8* p8;  
   for (i = 0; i < length / 2; i++) {  
     v = (int16)(sin(2.0f * M_PI * i * 2 / length) * 32767);  
     p8 = (int8 *)&v;  
     table[i*2]  = *(p8+1);  
     table[i*2+1] = *p8;  
   }  
 }  
 int main()  
 {  
   CyGlobalIntEnable; /* Enable global interrupts. */  
   for(;;)  
   {  
     Pin_Check_0_Write(1u);  
     genSineTable(waveTable_0, TABLE_LENGTH);  
     Pin_Check_0_Write(0u);  
     CyDelay(1);  
   }  
 }  

単純にサイン波を生成してPinの出力をH/Lして計測した。浮動小数点演算をするのでBuild SettingのLinkerで「-lm」を指定しないとリンクに失敗する。

PSoC 5LP Prototyping Kit
MASTER_CLK:72MHz
Release Mode


TABLE_LENGTH 実行時間(ms)
512 15.28
1024 29.64
2048 58.4
4096 116
8192 230


2016年1月22日金曜日

PSoC 5LP Prototyping Kitを外付けクリスタルで動作させる

20MHzの水晶振動子を使って80MHz動作させてみた。


P15[0]とP15[1]に20MHzの水晶をつなぎ、GNDに落とすCは22pFにした。

<追記:2016.02.14>

水晶振動子は P15[0]とP15[1]に接続する。
P15[2]とP15[3]はKHz XTAL用なので注意。

</追記>

DWRエディターのClock TabからEdit Clock...


PLLで80MHzを生成

TopDesign



Master_CLKをそのままPinに出力した。(PSoC 4ではPinに直接Clockをつなげないが 5LPなら可)

出力

80MHzで動作しているようだ(^q^/

使っているオシロのSDS7102のスペックを見てみると
Sampling rate / relay time accuracy ±100ppm
となっているので表示値はまあまあ正確な値だと思う。

79.992MHz~80.008MHz

内蔵Clockに戻す

水晶振動子を外すと動作しなくなるが、PSoC CreatorのConfigure System ClockでIMOをXTALからOSCに戻してProgramすれば動作するようになる。

メモ:

32bit/192kHzだと
192kHz * 32(bit) * 2(ch) * 2 = 24.576MHz
のクロックをI2Sコンポーネントに入れないといけないが、どうやって生成すればいいだろう?

クリスタルで72MHz駆動させて24MHzで187.5kHz?

PSoC 5LPでI2Sのテスト TDA1543編 DMAを使ってDDSで波形を出力

I2SコンポーネントにDMA転送しつつ波形テーブルを更新してみた。

GitHub
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_DMA.cydsn

PSoC CreatorのTopDesign

DMAコンポーネントのデーターシートを読むと「Ping Pong」や「Round Robin」という技が載っていたが、(読むのがめんどくさいので)まずは簡単にDMA転送が終わったら割り込みを発生させてその隙に波形テーブルを更新できないかテストしてみた。

I2Sコンポーネントのデーターシートを読むとデータを保持するFIFOは各チャンネル4ByteあるらしいのでI2Sの転送スピードより速くメモリーを更新できれば間に合いそうだ。

また、今回はL/Rチャンネルをインターリーブではなく独立してDMAからデータを転送する設定にした。

↑Data interleaving:のところ

DMA転送完了の割込み(nrq)を使うにはDMA Wizardで「Enable nrq」をチェックする必要があるようだ。


以下の様なコードが生成される。

 /* DMA Configuration for DMA_0 */  
 DMA_0_Chan = DMA_0_DmaInitialize(DMA_0_BYTES_PER_BURST, DMA_0_REQUEST_PER_BURST,   
     HI16(DMA_0_SRC_BASE), HI16(DMA_0_DST_BASE));  
 DMA_0_TD[0] = CyDmaTdAllocate();  
 CyDmaTdSetConfiguration(DMA_0_TD[0], TABLE_LENGTH*2, DMA_0_TD[0], DMA_0__TD_TERMOUT_EN | TD_INC_SRC_ADR);  
 CyDmaTdSetAddress(DMA_0_TD[0], LO16((uint32)waveTable0), LO16((uint32)I2S_1_TX_CH0_F0_PTR));  
 CyDmaChSetInitialTd(DMA_0_Chan, DMA_0_TD[0]);  
 CyDmaChEnable(DMA_0_Chan, 1);  

nrqで割込みを発生させて以下の様なコードでサイン波とノコギリ波を交互に出力するようにした。

 int8 waveTable0[TABLE_LENGTH*2];  
 int8 waveTable1[TABLE_LENGTH*2];  
   
 const uint8 sineTable8[TABLE_LENGTH] =   
 {  
     128, 134, 140, 147, 153, 159, 165, 171,  
     177, 183, 188, 194, 199, 204, 209, 214,  
     218, 223, 227, 231, 234, 238, 241, 244,  
     246, 248, 250, 252, 253, 254, 255, 255,  
     255, 255, 255, 254, 253, 252, 250, 248,  
     246, 244, 241, 238, 234, 231, 227, 223,  
     218, 214, 209, 204, 199, 194, 188, 183,   
     177, 171, 165, 159, 153, 147, 140, 134,   
     128, 122, 115, 109, 103, 97, 91, 85,  
      79, 73, 68, 62, 57, 52, 47, 42,  
      37, 33, 29, 25, 22, 18, 15, 12,  
      10,  7,  6,  4,  2,  1,  1,  0,  
      0,  0,  1,  1,  2,  4,  6,  7,  
      10, 12, 15, 18, 22, 25, 29, 33,  
      37, 42, 47, 52, 57, 62, 68, 73,  
      79, 85, 91, 97, 103, 109, 115, 122  
 };       
   
 void genSineTable(void* buff)  
 {  
   int i;  
   
   // 符号付き16bit sineTableの生成  
   for (i = 0; i < TABLE_LENGTH; i++) {  
     ((int8 *)buff)[i*2]  = (int)sineTable8[i] - 128;  
     ((int8 *)buff)[i*2+1] = 0;  
   }  
 }  
   
 void genSawTable(void* buff)  
 {  
   int i;  
     
   // 符号付き16bit sawTableの生成  
   for (i = 0; i < TABLE_LENGTH; i++) {  
     ((int8 *)buff)[i*2]  = i * 2 - 128;  
     ((int8 *)buff)[i*2+1] = 0;  
   }  
 }  

TDA1543の出力

ch1はノコギリ波、ch2はサイン波とノコギリ波をテーブルを更新して交互に出力させている。想定通りの波形が出力された。

波形テーブル更新の前後でH/Lさせたもの(波形テーブルの書き換え時間)を捕捉


ch1:波形テーブルの書き換え時間 ch2:TDA1543の出力

拡大

ch1とch2の立ち上がりがずれているのは、I2SコンポーネントのFIFOにたまっている分だと思う。ch2の立ち上がりで実際にI2Sのデータが送信されはじめていると思うので、テーブルの更新の完了(ch2の立下り)は間に合っていないみたいだがDMA転送はCPUと独立しているのでなんとかなっている感じだ。

テーブル長が128なのでこれを32ぐらいに減らせば安心かな?

DDSで出力

Github
https://github.com/ryood/TDA1543/tree/master/PSoC/I2S_Test/PrototypingKit_DDS.cydsn

DDSで波形を生成するようにしてみた。

符号付16bitでテーブルを作成したので、これをI2Sのバイトストリームの順序に合うようにバイト順を入れ替えてバッファに転送した。
 void generateWave_0()  
 {  
   int i, index;  
   uint8* p8;  
    
   // 波形をバッファに転送  
   for (i = 0; i < BUFFER_SIZE; i+=2) {  
     phaseRegister_0 += tuningWord_0;  
     index = phaseRegister_0 >> 22;  
      
     p8 = (uint8 *)(sineTable + index);  
     waveBuffer_0[i]  = *(p8 + 1);  
     waveBuffer_0[i+1] = *p8;  
   }  
 }  

TDA1543はデーターシートを見るとビットレート9.2Mbits/sまで大丈夫そうなので、I2Sコンポーネントの入力クロックを12MHz(I2Sのビットレートは6MHzになる)に設定して、1kHzと10kHzのサイン波をL/Rに分けて出力してみた。


ch1:LOUT ch2:ROUT

だいたい10kHzと1kHzのサイン波が出力されている。LPFをいれていないので10kHzの方はガタガタでブレブレ。

WS(ワードセレクト)

ch1:LOUT ch2:WS

WSの周波数がサンプリング周波数になる。

I2Sコンポーネントに12MHzのクロックを入れているので
12MHz / 16(bit) / 2(ch) / 2 = 187.5kHz
ちょっとずれているが、まあまあ近い値だ。

PSoC 5LP Prototyping Kitの内蔵クロックの誤差かな?

メモ:

サンプリングレートが187.5kHz程度でもDDSだと10kHzのサイン波形はジッターがかなり出る。周波数設定時に浮動小数点演算で1周期分の波形を生成するという手もありそう。

波形テーブルにSRAMを64kBのうち32kB使うとして最大16kサンプル
192kHz / 16k = 10.125Hz
工夫無しで10Hzぐらいから出力可能。計算時間はかなりかかりそうだけど。

元の波形テーブルを1024でなくもっと増やす?

う~ん。

2016年1月19日火曜日

小ネタ実験: 電圧検知できるパイロットランプ シャント・レギュレーターを使ってみる

メモです。

LTSpiceでシミュレーションしてみた。

シャント・レギュレーターはTL431を使いたいがLTSpiceにデフォルトで入っていないので同じ2.5VのLT1009でやってみた。

トランジスタ技術 2016年 1月号 の付録に「LTSpice使いこなし事典」というのがついていてパラパラ見てみたがTL431のモデルを使う方法がすぐにはわからなかった。気が向いたら後で調べてみる。

回路

過渡解析

TL431は1mA程度流さないとだめらしいのでR1を2kΩにした。シミュレーションだとぎりぎり1mA流れている。

R2、R3は5Vの電源電圧を91kΩと100kΩ分圧してTL431の2.5Vに近くなるようにしている。あんまり流しすぎるともったいないので値は高め。

この電圧とLT1009(TL431の代替)で作った2.5Vぐらいの電圧を単電源OPAMPのLM358をコンパレータとして使って比較している。

LTSpiceのSTEP機能を使って、電源電圧を4.8V~5.2Vに変化させてみた。

結果、5Vぐらいで切り替わっているようだ。

V1の電流は1.2mA程度(消費電流)。パイロットランプのLEDに1mA流すとすれば2mA強かな。

8Pinのマイコンを使った場合と比べると部品は少し増えるがノイズは減らせそうだ。