LPC1343 フォトダイオード出力をAD変換 - USBでPCへデータ転送 - リアルタイムグラフ表示


1. フォトダイオードのアナログ出力をADCで10ms毎に取得
2. USB virtual comで取得データをPCに送信
3. フリーソフトCPLTでデータログ&ほぼリアルタイムグラフ表示

開発Listへ戻る

以前のエントリ
LPC1343 ADC データ測定 リアルタイムグラフ表示(2012.4.2)

LPC1343 USB virtual COMでローカルエコー(2012.3.24)
を組み合わせただけです。


接続図


USB接続してTeratermにつなげると下のようにADCの値がばばばっと出てきます。

で、CPLT(以前のエントリ参照)につなげると
リアルタイムでデータがグラフ表示されます。
携帯電話の画面をフォトセンサに向け、明るくしたところが見て取れます。


コードです。
以下のエントリを順番にやっていって、3)の状態をベースにします。
 1)LPC1343 USB Virtual COM (USBシリアル変換 : Example pjt使用)(2012.3.11)
 2)LPC1343 USB Virtual COMをカスタマイズ!(2012.3.13)
 3)LPC1343 USB virtual COMでローカルエコー(2012.3.24)
追加分と、修正が入ったmain関数のみ記載します。

はっきり言って無駄がありますが、まぁいいかなと思ってます。

//追加分//
#include "adc0.h"
#include
#include

//修正分//
int main (void) {
GETDAT_T Getdata,adcdata;  // 構造体 adcdataを使用
Getdata.num=0;
int ad0data;          // ad0のdata用変数

LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG);
adc0_init();

LPC_SYSCON->SYSAHBCLKCTRL |=0x100; // Timer16B1 Turn ON
LPC_TMR16B1->PR = 7200-1; // 10kHz (Max 16bit dec:65535)
LPC_TMR16B1->MR0 = 100; // 0.01S
LPC_TMR16B1->MCR = 0x04; // Stop timer on MR0

USBIOClkConfig();

VCOM_Init(); // VCOM Initialization

USB_Init(); // USB Initialization
USB_Connect(TRUE); // USB Connect

while (!USB_Configuration) ; // wait until USB is configured

while (1) { // Loop forever
LPC_TMR16B1->TCR = 0x02; // TCR Reset
LPC_TMR16B1->TCR = 1; // TCR Start

ad0data=adc0read(); // get ADC data
itoa(ad0data,adcdata.d, 10);//adcdataをcharに変換
strcat(adcdata.d,"\r\n"); //改行コードを付加
adcdata.num=strlen(adcdata.d); //文字数を計算

VCOM_Serial2Usb(adcdata); // USBで送信
Getdata.num=0; //面倒だからそのまま
VCOM_CheckSerialState(); //よくわからないからexampleコードのまま
Getdata=VCOM_Usb2Serial();//面倒だし良くわからないからそのまま
while (LPC_TMR16B1->TCR & 0x01); //10ms経つまでwait
} // end while
} // end main ()


コード解説 

・まずインクルードです。
 以前のエントリ LPC1343 UARTでADCを制御する 2/2を参照です。
 adc0.c, adc0.hはリンク先からコピーしてプロジェクトに追加してください。

#include "adc0.h"

今回, itoa,strlen関数を利用するので以下もインクルードです。
#include
#include

その他は大体コメントのとおりです。
ADCに関しては List記事からADC関連の記事を見てください。
開発List

USB関連はまだわからないのでとりあえずexampleコードのまま使ってます。