チーム1317
課題名
動体視力測定器
研究者名
2-15-55 細川涼平
2-15-58 三木一馬
概要
lab3_adcを基にして、timer_pwm2の要素を組み込み実装した。
光をadc変換した値の変化をLCD上に表示し、同じくLCD上に表示された線の範囲内に入ると、
線が消えランダムに次の線が出るということを15回繰り返し、掛かった時間を測定する。
使用器具
PSoC*1
光センサ*1
ジャンパ線*4
ソース
#include <m8c.h>
#include "PSoCAPI.h"
#include "stdio.h"
#include "stdlib.h"
int arrange(a,TC){ //ランダムで定められたaの値を受け取り、LCDに線を表示する
unsigned int adc_data;
ADCINC_GetSamples(0); while(1){ TC+=1; while(ADCINC_fIsDataAvailable()==0); adc_data=ADCINC_wClearFlagGetData(); LCD_DrawBG(1,0,16,(adc_data/50)); LCD_Position(0,a); LCD_PrCString("| |"); if(adc_data>a*280 && adc_data<(a+1)*290){ LCD_Control(0x01); //LCDの表示を消す return(TC); } }
}
void main(void)
{
int a,i=0; int TC = 0; //TCで時間を測定する char TC2[8]; unsigned int adc_data; PGA_Start(PGA_HIGHPOWER); LCD_Start(); LCD_InitBG(LCD_SOLID_BG); M8C_EnableGInt; ADCINC_Start(ADCINC_HIGHPOWER); ADCINC_GetSamples(0); Timer16_1_Start(); while(i<15){ //15回繰り返す adc_data=ADCINC_wClearFlagGetData(); a = rand() % 10 + 2; //rand関数でランダムに値を入れる TC=arrange(a,TC); i++; } itoa(TC2, TC, 10); //TCは16進数なので、10進数に変換する //itoa関数を用い、TCの値をTC2に保存、10は10進数を表す LCD_Control(0x01); LCD_Position(0,0); LCD_PrString(TC2);
}
考察
初めは音センサで実装しようとしたが、ノイズが大きく、また、音センサから得られる値も小さい等の
問題が多々あり断念した。bpfによりノイズを取り除き、PGAのGainの値を増やしたり、
それでも値が小さければ、PGAの数を増やしたりすることにより、改善出来るのではないかと考えられる。
rand関数を使っているため、値が真にランダムなのではなく、パターンが決まってしまっている。
この改善策として擬似ランダム系列 (PRS) コンポーネントを組み込むことが考えられる。
また、光センサによる値がLCDに表示された線の範囲内に入った時、即座に線が移動するが、これを
時間を置いてから表示するようにしたほうが良いのではないかと感じた。この改善策として、timer_pwm2で
音階を発生させたように、TCを用いて間隔を空けることが考えられる。
線の位置の値を目算で調整して決めているため正確ではない。lab1_adcでやったように値をLCDに表示して
その値を参考に調整すれば今より正確になったのではないかと考えられる。
- 最終更新:2013-05-14 16:48:51