LCD オーディオレベルメーター(VUメーター)

Topics PICC Pro lite mode Actual use AD convert Timer0 Timer1 PWM LCD Interrupt PIC16F88 PIC16F1827

ver2.00 PIC16F1827対応!

Hitech PICC Pro Liteモードでも十分実用的なプログラムが出来る例としてご紹介します。

汎用LCDを使ってオーディオのVUメーターっぽいのを再現してみました。実験した所、実用的なレベルまで使える事が分かりましたので公開します。写真は小型のキャラクターLCDモジュールを使い、それをお菓子(フリスク)のケースに納め、制御回路はフィギュア(初音ミクのオルゴール)をケースとして利用しました。できるだけ簡単な回路を目指しつつ、基本は押さえた構成にしました。電源は5V単電源で、アナログ回路は簡易的な全波整流回路と積分回路の構成としています。メーター表示は直接電圧を表示するモードと、対数変換後に表示するモードの2種類が選べます。表示キャラクタも4種類から選ぶ事ができるなど、多彩なユーザー設定項目があります。


動作ビデオ(YouTube)


超小型LCDキャラクタディスプレイモジュール(16×2行バックライト・オレンジ)を使用した場合。
0:00〜0:12 windowsメディアプレーヤーでサウンド再生中のバーグラフ動作
0:13〜0:19 サウンド再生を停止し、数秒後にLCDのバックライトが徐々に消える動作
0:19〜0:28 サウンドを再び再生し、徐々にバックライトが明るくなりながらバーグラフ動作
        途中でサウンドを停止しLCDバックライトが暗くなりかかっている時にサウンドを再生
0:28〜0:45 設定画面の紹介
0:45〜0:57 バーグラフ動作



※点滅している様に見える部分は、シャッタースピードの関係によるもの。

白抜き文字バックライト付き 超小型LCDキャラクターモジュールSD1602VBWB-XAを使用した場合。

仕様

装置名 LCDステレオVUメーター
主な機能 2チャンネル分の10ビットA/Dコンバートされた値を対数バーグラフでリアル表示
理想ダイオードによる全波整流回路のため、-42dB〜+5dBの広いレンジ
L/R独立した48段階バーグラフ
簡単なハードウェア構成

バックライトのオンオフ、バックライトの明るさ調整(Ver1.30以降)
バックライトのフェードイン・フェードアウト機能(Ver1.30以降)
ソフトウェアーコントラスト調整
ライン入力、出力(ヘッドフォンなどで使用する時は音声バッファが必要になります)
単一5V電源のみで動作
レベルマーキング機能
周波数特性 40Hz〜20KHz以上
電源 動作電圧:5V  電流:バックライト点灯時 19mA以下、消灯時 4.5mA以下


ブロック図

回路図



最新の回路図(Ver1.3)はこちらからダウンロード(pdf)できます


部品表

特別な部品は使用しませんでしたので入手が比較的簡単と思います。

Item Quantity Reference Part 詳細
1 2 C3,C1 0.1uF(M) マイラーコンデンサかポリエステルフィルム 耐圧は12V以上(一般的には50V品以上が入手可能)
※ソフトウェアにて更に修正移動平均化(もしくは平滑移動平均)するので、拘らなければ普通のセラミックコンデンサでも可能。
2 2 C4,C2 1uF/50V 電解コンデンサか積層セラミックコンデンサ
3 3 C5,C6,C8 10uF/16V 電解コンデンサ
4 2 C9,C7 0.1uF 積層セラミックコンデンサ
5 1 DBG1 HEADER6_L PICkit2接続用コネクタ
6 2 D1,D2 1N4148 小信号用ダイオード(1S1588,1S2670Aでも可)
7 1 JP1 HEADER 2X2 1-2および3-4間を直結
8 2 J2,J1 PHONEJACK STEREO Φ3.5mmステレオヘッドフォンジャック
9 1 J3 UX60A-MB-5ST_HIROSE USB mini Bタイプ(5V電源供給用)
10 1 LCD1 SD1602HUOB
SD1602VBWB-XA
小型LCD。SC1602Bでも使用可能(電源の配置に注意)。接続コネクタなど必要。
11 1 Q1 2SC1815 汎用NPNトランジスタ(LタイプやランクY,O,GR等使用可能)
12 6 R1,R3,R4,R5,R7,R8 10K/1% 金属皮膜抵抗
13 2 R2,R6 100K/1% 金属皮膜抵抗
14 1 R9 22 カーボン抵抗 1/6W 5% ジャンパーするほうが良い場合もあります。各自調整してみてください。
15 3 R10,R14,R15 ※ 100 カーボン抵抗 1/6W 5%
16 1 R11 10K カーボン抵抗 1/6W 5%
17 2 R12,R13 1K カーボン抵抗 1/6W 5%
18 2 SW2,SW1 PUSH_BUTTON モーメンタリープッシュスイッチ
19 1 U1 LMC660CN 単電源OPアンプ(Quad)ナショナルセミコンダクタ。末尾AINならば尚良い。
その他のオペアンプは不可。
20 1 U2 PIC16F88
PIC16F1827
PICマイコン Ver.2.00よりPIC16F1827にも対応しました。ハードウェア上の変更はありません。
新規で製作する場合はPIC16F1827をお勧めします。
21 2 VR2,VR1 50K_VR 半固定抵抗器
22   その他   基板、ケース、DIP18P ICソケット、配線材

※ICSPを利用しない場合は、DBG1は不要です。またR14,R15の抵抗を使わずにPICとLCD間を直接接続することができます。


ダウンロード

Date version Build Folder Device note
2011/8/23 2.20 MPLAB8.76,Hitech PICC Pro lite mode v9.82 C:\picsrc\piccpro\lcd_bar_16f1827 PIC16F1827 PIC16F1827の最新版


Date version Build Folder Device note
2010/3/31 1.71 MPLAB8.40,Hitech PICC Pro lite mode v9.70 C:\picsrc\piccpro\lcd_bar PIC16F88 PIC16F88の最新版
アップデートは以降PIC16F1827にて行います。
なお、ハードウェアは変更ありません。

バージョン履歴


※Folderで指定されているフォルダにmain.c等の全てを解凍すれば、プロジェクトがそのまま使用可能です。いずれもzipで圧縮されており、すぐ動作可能なhexファイルが同梱されています。ビルドはこちらを参考にして最新のPICC Proをダウンロードして使用してください。


使用方法

USBを差込み、電源を入れ、適当なオーディオソースを入力すると、LCDが音の強弱に対応したバーグラフを表示します。

調整

表示 機能 詳細 初期値
通常時 電源を投入すると、バージョン表示のタイトルデモ画面が表示されたあと、音声が入力されていればバーグラフが表示されます。
無音がしばらく続くと、約3秒の時間を使ってゆっくり暗くなります。
モードボタンを押し続けると、現在のバージョンを表示します。
N/A 
モードボタンを押して0.5秒間

または、モードを押しっぱなしにした時
使用しているPICの型番と、現在のファームウェアバージョンを表示します。モードボタンを離すと設定1の項目に移ります。 2.20
設定1
ガイドマーカー
モードボタンを押すとガイドマーカー設定モードになります。値変更ボタンを押すと、ガイドマークの「’」が0から16の17段階で設定できます。これは3dB毎にマークを付ける機能であり、バーグラフには影響しません。 14
設定2
コントラスト調整
LCDのコントラストを調整します。一番見やすくなるまで値変更ボタンを押し続けます。
LCD別の設定はこちら
50%
設定3
オートバックライト設定
無音時から自動的にバックライトが消灯するまでの時間を設定します。2秒〜254秒までの2秒刻みで設定できます。
この秒数に更にフェードアウト時間の約3秒が加わります。
0秒にすると、手動設定のみとなります。手動のバックライトオンオフは、通常時に変更ボタンを押す事で切り替わります。
10秒
設定4
バックライト最小値
バックライトの最小値を設定します。0が消灯し、1〜20の間で明るさを決めます。バックライトは現在設定された値での明るさとなっており、変更ボタンを押す事で変化します。 6
設定5
バックライト最大値
バックライトの最大値を設定します。21〜63の間63が一番明るくなります。バックライトは現在設定された値での明るさとなっており、変更ボタンを押す事で変化します。 63


設定6
表示単位
バーグラフの表示単位を設定します。
dBv:【対数変換式】従来の1バー=1dBv
Volt:【直接表示方式】電圧による直接の表示
BoostV:【直接表示方式】電圧による直接の表示で電圧レンジを持ち上げています。

【対数変換式】
音圧を対数変換で表示します。LCDは直線表示になります。1バー=1dBで表示できますので簡易メータとしても使用可能です。クラッシックなどのダイナミックレンジの広い曲に最適です。
【直接表示方式】
音圧を整流し、その電圧値をそのまま表示します。表示はLCDが対数的に表示されます。リズミカルな曲で良好な動きです。1バーは対数的な表示になります。詳しい電圧値は同梱のエクセルファイルを参照してください。

dBv
設定7
LR表示
左側にLRを表示します。その場合、3バーは表示が無くなります。
表示例はキャラクター種類のType3を参照してください。
No
設定8
キャラクタ種類
バーグラフのキャラクターを設定できます。タイプは4種類選ぶ事ができます。 Type1
設定9
バーグラフ応答性
バーグラフの応答性を0〜15の間で調整することができます。0はA/Dの即値を使用し一番早い動きですが、ちらつきが目立ちます。4〜8の間が妥当な調整となります。
ver1.61以降は数字のみで、右下に表示されます。
8
終了 設定終了時に0.5秒間表示して終わります。
設定途中で電源を切ったりした場合は、設定されない項目がでる場合があります。
設定中は電源を落とさないように注意してください。
N/A

キャラクター種類

Type1 ノーマル表示 Type2 ブロック
Type3 カジュアル音符 Type4 ターゲット

※表示例は一部旧バージョンが含まれています。

トラブルシューティング

現象 対処 理由
電源を投入した最初に一瞬バックライトが瞬く セットボタンを一度だけ押してください。次回からその現象がなくなります。 手動バックライト設定があるため、最初にそのような現象が現れます。使用できるプログラムの空き容量が増えたら対策を実装したいと思います。
電源を入れても何も表示しない 電源を入れて数秒後にmodeボタンを押し、
2秒程経ってから更にmodeボタンを押して、setボタンを押し続けてみてください。
LCDが見えない時にコントラスト設定に入る手順です。使用しているLCDのコントラストが、初期値では表示出来ない値かもしれません。
何も繋いでいないのに、レベルメータのバーが出ている。 PICマイコンの12,18ピンをオペアンプの出力と切り離し、GNDと5Vに10KΩ程度の可変抵抗器を取り付けてテストします。 オペアンプ側の回路かPIC側の回路かの不具合切り分けを行います。テスターがあれば、無音かつVRをGNDいっぱいに回してU1の5,10と6,7番とGNDラインが0Vであるかを確認します。5,10番に既に電圧が出ていれば、前段アンプ、6,7番に電圧が出ていれば後段アンプになにか問題があります。両チャンネル同じ現象であれば、電源の配線などを疑ってみてください。アナログ回路の配線を今一度チェックして見てください。


感想

昔ラジカセについていたLCDのVUメーターのイメージもあって、さほど期待をしないで作りましたが、実際に動かしてみると追従性はかなりよく、音のモニター用として実用的な回路になりました。

最初はダイオードの整流回路で実験しましたが、音が聞こえるのにメーターが振れないといった事があり、それもそのはず、ダイオードの電圧降下が無視できないので理想ダイオード回路にしました。これで1024段階の3段目(電圧でいうと約6mVから)からメーターとして機能できるようになりました。

回路も比較的簡単で、5V単電源で動作するので、バックライトが青などの液晶などを使って自作パソコンに組み込んだりするのにも最適と思います。


技術情報

以下は現在公開している情報のリリースノートとなります。改良するヒントなどとしてお役立てください。

バーグラフ

SC1602Bや今回使用したキャラクタLCDモジュールは、ユーザーフォントが最大8種類まで作成する事ができます。
このLCDはグラフィックは使えませんので、ユーザーキャラクタを利用して擬似グラフィックを実現しています。
キャラクター間は約1ドット分のスペースがあるので、そのデザインに合わせるために一つ毎の縦の棒にしました。こうすれば、違和感がなくバーグラフを表示できます。一文字分で3種類のグラフィックを用意します。3種類x16文字で合計48段階のバーグラフを実現しています。

バーグラフの表示は、正式なVUメーターの定義に基づく表示とは異なります。本来のVUメータの定義は正弦波1KHzで+4dBの入力があった時に0VU(dBでない)を指示するまでの応答時間が300m秒と定義されます。(積分コンデンサの交換など、調整次第ではそれに近づけることは可能です)

バーグラフの動きはソフトウェアで応答特性を調整していますが、ハードウェアの調整としてC1,C3の容量を0.1〜4.7uFの範囲で交換すると応答速度が調整できます。電解コンデンサでも良いですが、その場合は無極性(ノンポーラ)を使用するか、希望する値の倍の電解コンデンサをプラス同士を直列にして使用してください。ここら辺の調整は好みが出るようです。

A/D変換

約6ms毎にADコンバータを読みに行きます。ADコンバータで得られたデーターを修正移動平均処理によって平均化してバーグラフを滑らかに動作させる処理を行っています。設定は即値で動作する設定から、最大16倍平均化するように設定できますのでピークメータとしてもVUメータ(厳密ではないが)としても使用が出来ます。

対数変換

A/Dコンバータでそのまま音のレベルを表示しても良いのですが、1バーグラフ=1dBvという表示にしたい場合もあります。その場合は対数変換を必要とします。トランジスタなどで対数アンプなどを作る方法もありますが、今回は外部回路を簡単にしたために、ソフトウェアで処理します。
対数変換テーブルをエクセルで作成し、そのデーターテーブルをプログラムに組み込みました。ADコンバータは10ビットなので、データーテーブルを8ビットにして、連続したデーターが昇順の法則が外れた時に、上位2ビットをセクターとしてアドレスを管理します。こうすればデーターテーブルを8ビットで処理できますし、8ビット分のデーターのみをEEPROMに記載するだけで済みます。取得した10ビットADコンバーターの値を下位8ビットと上位2ビットに分けて、上位2ビットでまずセクターを参照し、下位8ビットでセクター内のデータ比較をして、LCDのバーグラフ位置を0〜48の値で取り出しています。今回のバーグラフは1バー=1dBvに対応させるため、外部オペアンプで約3.6倍した電圧を入れると対応するようにしました。3.6倍という数字は+5dBmを5Vのダイナミックレンジギリギリまで使うようにする値から求めたものです。

ADコンバータの値に対するバーグラフの値

バーグラフの対数直線性

10ビットのADコンバータで、5V単一駆動ですので、下のレンジではどうしても解像度が荒くなってしまいます。それなので、最初の6ステップ位はおおよそのレンジ表示になります。しかしながら、簡単なハードウェアと実用性を考えこのままでいく事にしました。興味のある方は電圧のレンジを上げたりするともっと性能が引き出せると思います。ダウンロードファイルにエクセルの計算表が入っていますのでご活用ください。(エクセル側で、ツール→アドインより分析ツールを導入する必要があります)

LCD

LCDへのデーター転送は、一般的な4ビット方式で使用しています。
コントラストについては、大抵の場合はハードウェアで電圧をコントロールするのですが、今回は内部のPWMモジュールを利用しています。このようにすれば、USBの電源がパソコンやハブなどの環境で4.5V〜5V位のバラツキがあってもソフトウェアで簡単にLCDのコントラスト調整ができるので、その都度ドライバーなどで回して合わせる煩わしさから解消されます。LCDのPWMは約7.8KHzで発振させています。LCDの電源についてSD1602HUOB以外のLCDを使用する場合は電源にご注意ください。

殆どのメジャーなバックライト付LCDが使用できます。


各LCD別参考設定値

メーカー・型番 設定画面 コントラスト設定の目安
サンライク
SD1602HUOB
SD1602VBWB-XA
50%
(初期値)
サンライク
SC1602BSLB-SO-GB-K
80%
リンクマン
TC1602E-13T(R)
100%


バックライト

バックライトは約120Hzの64段階のソフトウェアタイマー割り込みによるPWMにて実現しています。使用するLCDによってはフリッカー(ちらつき)が目立つ場合もあります。気になる場合は、バックライトのLED部分に47〜100uF程度のコンデンサーを並列接続すると良いでしょう。その場合は、設定値より見かけの明るさが明るくなります。

製作する環境によっては、このPWMのノイズが回り込んでしまい、バックライトオフ制御にならない場合があります。特にResponseが0の場合は、ADコンバータの瞬間値を使いますので、その症状が顕著に現れる様です。その場合は回路のグラウンドの引き回しを見直したり、ソースファイル上のBacklight_Sensitiveの値を大きくして回避するなどしてください。

オペアンプ性能

全波整流回路を簡単にするために、オペアンプは0Vから電源電圧までの出力が可能なオペアンプ(レイルトゥレイルという)を使用しています。信号がマイナス側に振れた時は、出力が反転してプラス側に振れ、信号がプラス側に振れたときは、抵抗2つを介して信号が抜けるようになります。この回路はバイポーラ型などレイルトゥレイルでないオペアンプでは構成することができません。またレィルトゥレイルであっても、入力信号が電源よりマイナスになることを許容していないオペアンプも使用ができません。今回使用したオペアンプはLMC660でしたが、音として利用していない事と、オーディオ帯域でそこそこの精度を出せるので妥協しています。オペアンプのロットによってオフセットのばらつきがあるものがあります。私が使ったものは、たまたま良かった模様ですが、特性が合わないと無音でも下のバーの1,2個が表示される、右と左のバランスが1メモリ位変わるなどの症状があります。現在の回路では調整できませんので、そのときはデバイスを色々交換することや、テーブルで下の10dBくらいを使わない、またはLとRでそれぞれの独立した変換テーブルなどで対応する方法が考えられます。

その他


写真集

別ページに移動しました。

BBSにご意見ご感想をお待ちしております


2011/10/18 一部文章修正等
2011/10/2 語句の誤り訂正 単純移動平均→修正移動平均
2011/10/1 旧ダウンロードファイル削除。説明修正。
2011/8/24 ver2.20 公開、トラブルシューティングを追加
2011/8/22 ver2.10 公開
2011/8/7 回路図ver1.3にする。パーツリスト修正。
2011/6/29 ver2.00 PIC16F1827対応
2010/3/31 ver1.71に差し替え
2010/3/14 ver1.70公開 LCDバックライト周波数を60Hzから120Hzに変更
2009/11/17 ver1.67公開 説明追加
2009/11/15 写真集を別ページへ移動
2009/10/23 ver1.65公開
2009/10/15 ver1.61公開
2009/10/11 直接表示方式としてver0.02をソースコードを含め公開
2009/10/5 ver1.42と リニアスケール表示実行ファイル(テスト版)0.01公開
2009/8/11 ver1.41公開
2009/5/8 ver1.40公開
2009/5/6 ver1.34公開
2009/5/3 ver1.33公開
2009/3/11 一部内容修正
2009/2/22 ver1.31公開
2009/2/18 オペアンプについて一部修正
2009/2/15 波形データ追加、ver1.20公開、内容の整理
2009/1/20 一部レイアウト変更
2009/1/18 一部修正、回路図修正
2009/1/16 ver1.11の公開
2009/1/13 ver1.10の公開
2009/1/12 lcd.cの修正
2009/1/4 ブロック図追加、文章追加
2009/1/3 初版作成

(C)2009-2011 air variable All Rights Reserved..

ホーム