PR 記事には広告が含まれています
スポンサーリンク
Translate

マイコンでレベルメーターを作りました

スポンサーリンク

 


mbedマイコンのアナログ入力に、パワーアンプの出力信号をつないで、レベルメーターを作りました。
アナログのレベルの大きさをIFという命令で10段階にレベル分けしてLEDを光らせています。

配線のような図
poweramplevelmeter
dp4にアンプの出力をつないでいます。アナログ入力を使うため、マイコンの左側の電源ピン(AVdd,AVss)も3.3VとGNDに接続しておきます。
dp4のA/D変換した結果の大きさをIFの命令で0から0.01,0.02,0.03,,,0.1までの10段階で分けてLEDを光らせています。

コハペペより
パワーアンプの出力を直接p4に接続してしまうと、マイナスの電圧が入力されてしまい、場合によってはマイコンを壊してしまう可能性があるためおすすめしません。つなぐのであれば0.1uF~10uF程度のコンデンサを間に入れた方がいいと思います。

ついでに、デジタル入力とアナログ入力の違いについて簡単に説明します。
デジタル入力は、電圧があるかないかである場合には1、ない場合には0になります。
プログラムでは
DigitalIn input(dp4);
と書くとdp4がデジタル入力になって、dp4に電圧があるときはinput=1、ない時にはinput=0のどちらかになります。
(電圧があるといっても小さいと無いと判断されてしまうので、電源電圧の半分以上の電圧(正確には電源電圧の0.7倍以上)が必要です。)

アナログ入力の場合は電圧によって0~1までの数字になります。0Vの時に0になり、電源電圧(AVDD)と同じときに1になります。電源電圧の半分の場合は0.5です。
プログラムでは
AnalogIn input(dp4);
と書くとdp4がアナログ入力になって、dp4の電圧に応じてinputの値が0~1の範囲で変化します。
digiinanain

レベルメーターではinputの値がある値以上だったらLEDを点灯するというようにプログラムしています。

float value = input;
led1 = 0;
led2 = 0;
....
if( value > 0.01 )
    led1 = 1;
if( value > 0.02 )
    led2 = 1;
....

のような感じです。
if()の中でinput を比較すると正しく動作しなかったため、いったんvalueという変数に代入してからifのカッコの中で比較しています。