PSoCのADCINC12でA/Dコンバーターを使う


psoc_adcint12_01.gif
今回はPSoC Designerに用意されている12ビットA/Dコンバーター「ADCINC12」の計測値をキャラクタ液晶モジュールに表示する。

psoc_adcint12_02.gif
デバイスエディターの選択画面で「ADCs」にある「ADCINC12」を右クリックして現れたメニューから「Select」を選択する。

psoc_adcint12_03.gif
配線の設定画面に切り替えるため「Config」メニューの「Interconnect」を選択する。

psoc_adcint12_04.gif
「ADCINC12_1」のアイコンを右クリックして現れるメニューから「Place」を選択し、A/Dコンバーターモジュールを配置する。

psoc_adcint12_05.gif
内部配線図にデジタルブロックが2つとアナログブロック1つが配置された。確認したら左側で詳細設定をする。
「TMR Clock」を「CPU_32_KHz」に、
「CNT Clock」を「CPU_32_KHz」に、
「Input」を「Port_2_1」にした。今回は信号を増幅したりせず、ポート21からの電圧を直接A/Dコンバーターに入力することにした。

psoc_adcint12_06.gif
設定ができたら「View」メニューの「Application Editor」を選択し、ソースコード入力画面に切り替える。

psoc_adcint12_07.gif
A/Dコンバーターを動作させるためのサンプルソースコードを開く。ツールバーから「ADCs」の「ADCINC12」を指定し「User Module Datasheet」ボタンを押す。

psoc_adcint12_08.gif
するとA/Dコンバーターのデータシートが表示される。ここに掲載されているサンプルソースコードをコピーする。今回はメイン処理部分をすべてコピーした。

psoc_adcint12_09.gif
そして「main.asm」内に貼り付ける。そのとき「ADCINC12_」の部分を「ADCINC12_1_」に置換しておく。修正したら「Build」メニューからビルドする。

psoc_adcint12_10.gif
ビルドがエラーなく終了すればA/Dコンバーターの準備が整ったことになる。しかしこのままではPSoCへ書き込んでもA/Dコンバーターの動作状況を見ることができない。

次に計測値をキャラクタ液晶モジュールに表示するように設定する。「View」メニューの「Devivce Editor」を選択し画面をデバイスエディターに切り替える。

psoc_adcint12_11.gif
デバイスエディターが開いたが、配線設定画面なので選択画面に切り替える。「Config」メニューの「Selection」を選択する。

psoc_adcint12_12.gif
これでデバイスエディターの選択画面が開いた。ここで左側の「Misc Digital」にある「LCD」を右クリックして現れるメニューから「Select」を選択する。

psoc_adcint12_13.gif
そして再び配線図に切り替えるため「Config」メニューの「Interconnect」を選択する。

psoc_adcint12_14.gif
配線設定画面が開いた。ここで左側の設定欄で「LCDPort」を「Port_0」に設定する。すると自動的に左側下部のポート一覧の部分にLCDで利用するピンが表示される。確認したら「View」メニューの「Apllication Editor」を選択して画面を切り替える。

psoc_adcint12_15.gif
次に液晶モジュールに計測値を表示するためのソースコードを記述する。参考にするためサンプルコードを開く。ツールバーで「Misc Digital」の「LCD」を指定し、「User Module Datasheet」を選択する。

psoc_adcint12_16.gif
今回は文字列表示処理は不要なため液晶モジュールの初期化処理と表示位置の設定処理のみコピーする。

psoc_adcint12_17.gif
そして「main.asm」内にコピーしてきた初期化と表示位置設定処理を貼り付ける。このとき「LCD_」の部分を「LCD_1_」と置換しておくのを忘れないようにする。修正したら次に計測値を表示する処理を入れる。これもサンプルソースコードを参考にするため再びツールバーからデータシートを開く。

psoc_adcint12_18.gif
今回はデータシート中の「API」の部分を参照する。ここには標準で用意されている関数とその説明が一覧されている。この中から数値を表示する関数「LCD_PrHexInt」を探しサンプルソースコードをコピーする。

ちなみにこの「LCD_PrHexInt」関数は16ビット値を大文字の16進数表示するためのものだ。標準では残念ながら10進数の数値表示には対応していない。

psoc_adcint12_19.gif
コピーしてきた表示処理を「main.asm」の中に貼り付ける。このときも「LCD_」を「LCD_1_」にすることを忘れないようにする。

これでPSoC Designer上での準備が整った。ビルドしてPSoC Programmerで書き込む。

_DSC8964.JPG
今回は基板上に可変抵抗器が用意されているPSoCEval基板を利用して動作確認した。

_DSC8965.JPG
可変抵抗器のすぐ横に「VR」、「GND」、「VCC」の3つが用意されている。それぞれポート21、GND、VCCに接続する。液晶モジュールは「PSoCを使いキャラクタ液晶モジュールに文字を表示する」のときと同様にポート0に接続する。

_DSC8966.JPG
これで液晶モジュールに計測値が表示された。表示される値は0Vのときが「F800」、5Vのときが「0800」となる(つまり-2048~+2048の数値で出力される)。

写真では「043E」と表示されている。これを10進数の計測値に変換すると...(5.000V÷4096)×(0x043E+2048)≒3.825Vとなる。


カテゴリー「電子工作」 のエントリー