PSoC5LPを使ってレベルメータを作ってみた!

これはPSoC Advent Calendar 2017の23日目の記事です。
本投稿にて私もAdvent Calendarデビューします。初心者ではありますが一生懸命書きましたので、どうか宜しくお願いいたします。

 

概要

PSoC 5LPに搭載されているコンパレータを使い入力電圧の大きさに応じてLEDアレイが段階的に光るレベルメータを作ってみました。①バー表示と②ドット表示の2種類の光らせ方を試しています。

  

f:id:yoyoda:20171222224223j:plain

  

今回使ったもの

 ・ノートPC 【OS: Windows 10 Pro, 開発環境: PSoC Creator 4.1】
 

目次 

 1.バー表示型レベルメータの試作
     a) 回路図作成
  b) ピンの指定
  c) ブレッドボード上で組立・配線
  e) プログラミング
  f)ビルド&実行
 2.ドット表示型電圧レベルメータの試作
 3.まとめ
    4. 最後に

 

1.バー表示型レベルメータの試作

    a) 回路図 (Schematic)作成
          下図の回路を作成しました。 

f:id:yoyoda:20171222223532j:plain

ちなみにPin0とPin1~4、 VDAC8、Compは以下のように設定しています。

f:id:yoyoda:20171222235523j:plain

 

f:id:yoyoda:20171223001129j:plain

 回路の要点を説明します。

ポテンショメータの電圧値(Pin_0の電圧値)とVDAC8の電圧値をコンパレータ(Comp)により比較
②VDAC8の電圧値よりも高ければ1を出力(LED点灯)、低ければ0を出力(LED消灯)

上記①、②のルールに基づいて地道に各入力電圧値に対する出力電圧値を計算していくと下図のようになる。バー表示になっていることが確認できる

 

f:id:yoyoda:20171222235224j:plain

 b)ピンの指定

f:id:yoyoda:20171223002820j:plain

  空いてているポートにPin_0 ~ Pin_4を適当に割り振ります。
  (今回はPin_0をP3 [0]に、Pin_1を P2[0]、Pin_2をP2[1]、Pin_3をP2[2]、 Pin_4をP2[3]に割り当ててみました。)

 

c) ブレッドボード上で組立・配線

 回路図、ピン情報をもとに、抵抗、LEDアレイ、小型ボリューム、PSoCをブレッドボード上に組立・配線しました。

f:id:yoyoda:20171223005144j:plain

 

d) プログラミング
 回路のVDACとCompを使えるようにするため、下記のコードを追加します。

              VDAC8_1_Start();
    VDAC8_2_Start();
              VDAC8_3_Start();
              VDAC8_4_Start();

              Comp_1_Start();
              Comp_2_Start();
              Comp_3_Start();
              Comp_4_Start();

f:id:yoyoda:20171223005748j:plain

 

e) ビルド&実行

f:id:yoyoda:20171223011618j:plain

 電圧値が上がるにつれてLED点灯数が増えていきます。
バー表示型電圧レベルメータの完成です☆

 

2.ドット表示型電圧レベルメータの試作


ドット表示型にするため、先ほどのバー表示型電圧レベルメータの回路図(Schematic)に少々変更を加えました。

f:id:yoyoda:20171223013200j:plain

お分かりでしょうか??

XOR(排他的論理和)をCompの後に追加しました。

XORは入力の値が一致しない(”1と0”もしくは”0と1”)ときのみ1を出力します。入力が”1と1”の場合や0と0”の場合は0を出力します。

XORを使うと、1と0が隣り合う部分のみ1に変換し、他の0と0、1と1の部分は0にすることができるので、下図のようにドット表示型を実現できます。

f:id:yoyoda:20171223020221j:plain

ビルド&実行しました。

f:id:yoyoda:20171223021231j:plain

電圧上昇に伴いLEDのドットが右に移動するのを実際に確認でき、所望の電圧レベルメータが出来ました☆=

 

3.まとめ

PSoCのコンパレータを使ってレベルメータを作ってみました。
今回はポテンショメータを使って電圧変化を確認しましたが、色々なセンサをつなげてみたりしてみてもいいかもと感じました。

 4. 最後に

実は試作しているときに色々と失敗してしまったことがあります。
同じような問題で困った人が出てくるかもしれないので、何らかの参考になればということで、情報を共有させて頂きます。

①本当は10個のLED全部光らせるつもりでした...

   最初はコンパレータを10個回路図にドラッグ&ドロップして回路を作っていたのですが、ビルドしたところエラーが出現しました。PSoC5LPで使用可能なコンパレータ数は4個だけなので10個は無理ですという内容のエラーです。今回はMax4個のLEDが光るレベルメータに仕様変更することで対応しましたがやはり、事前にPSoCのデータシートを見とかないかんなと痛感しました。

 

②プログラムのコードエラー

大文字と小文字を間違えて、エラーが出現しました。
5分くらいなんでーって悩む羽目になってしまいました。

  

f:id:yoyoda:20171223025528j:plain

 ③ADコンバータを使って入力電圧値を取得し、プログラム(IF文)で各ピンを1(LED点灯)、0(LED消灯)切り替えれば、10個光らせられると思うのですが、今回はハード的に作ってみたかったので、あえてやってないです。

 

色々と手を動かしていると時には失敗することもありますが、新たな知見を得たり、できたときの楽しさを実感じたりできるので、たとえ失敗しても手を動かすことはプラスになる気がしました。PSoC5LPも以前よりは慣れ、またPSoC4 BLEも購入したのでより一層色々と遊んでいけたらなと思います☆