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 MR0USBIOClkConfig();
VCOM_Init(); // VCOM Initialization
USB_Init(); // USB Initialization
USB_Connect(TRUE); // USB Connectwhile (!USB_Configuration) ; // wait until USB is configured
while (1) { // Loop forever
LPC_TMR16B1->TCR = 0x02; // TCR Reset
LPC_TMR16B1->TCR = 1; // TCR Startad0data=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コードのまま使ってます。