daiki hiraoka
/
EMG
筋電センサプログラム
筋電
Diff: main.cpp
- Revision:
- 2:9a7f77850970
- Parent:
- 1:91d6b2ee7a2e
- Child:
- 3:5d91bfe4a79d
--- a/main.cpp Sat Jan 21 07:37:48 2017 +0000 +++ b/main.cpp Sat Jan 28 01:35:08 2017 +0000 @@ -8,11 +8,18 @@ #define ON (1) #define OFF (0) -#define SAMPLING_RATE (1) /* A/D sampling rate (1kHz) */ -#define MAINCYCLE 200 /* [ms] */ +#define SAMPLING_RATE (0.01) /* A/D sampling rate (1kHz) */ +#define MAINCYCLE 20 /* [ms] */ #define DEBUG +union u64_dataType_g +{ + double DData; + char CData[8]; +}; + + /*** Global Variable ***/ DigitalOut myled1(LED1); /* 起動確認用 */ DigitalOut myled2(LED2); /* 割り込み確認用 */ @@ -27,27 +34,20 @@ UINT32 g_adCnt; +/* 変数定義 */ +uint32_t Fdiv; +double InputData = 0; + + /*** Functions ***/ -/* A/D変換割り込み */ -void ad_sampling(){ - static INT32 i = 0; - /* 割り込み中点灯 */ - myled2 = 1; - g_adCnt++; - g_wave = wave_in.read() * 3.3; /*[V] */ - #ifdef DEBUG_ - i++; - pc.printf("attach: %d,%d\r\n", i, g_adCnt); - g_wave = i / 100 * 3.3; - g_wave = g_adCnt * 3.3; - if(i > 100) i = 0; - #endif - wait(0.01); - /* A/D変換完了後送信 */ - g_sendFlg = 1; - myled2 = 0; -} +/* 通信関数宣言 */ +void Communicaion(double data,int byte); +void CommInit(); +double InputAnalgData(); +/* A/D変換割り込み宣言 */ +void ad_sampling(); + INT32 main() { @@ -56,6 +56,9 @@ DBL64 et = 0; myled1 = 1; + /* 通信初期化 */ + CommInit(); /* 初期化 */ + /* A/D変換対タイマ割り込み開始 */ myled2 = 1; /* Start interval timer */ @@ -75,10 +78,12 @@ if(g_sendFlg == 1) { /* データ送信 */ i++; - #ifdef DEBUG - pc.printf("cnt: %d, ad cnt: %d, wave: %f\r\n", i, g_adCnt, g_wave); + #ifdef DEBUG_ + pc.printf("cnt: %d, ad cnt: %d, wave: %f\r\n", i, g_adCnt, InputData); + /* InputData = InputData + 0.1; */ #endif - + + Communicaion(InputData,1); /* フラグリセット */ g_sendFlg = 0; } @@ -89,3 +94,72 @@ Thread::wait((uint32_t)(MAINCYCLE - (et - st))); } } + +/* A/D変換割り込み */ +void ad_sampling(){ + static INT32 i = 0; + /* 割り込み中点灯 */ + myled2 = 1; + g_adCnt++; + InputData = InputAnalgData(); /*[V] */ + #ifdef DEBUG_ + i++; + pc.printf("attach: %d,%d\r\n", i, InputData); + g_wave = i / 100 * 3.3; + g_wave = g_adCnt * 3.3; + if(i > 100) i = 0; + #endif + /* wait(0.01); */ + /* A/D変換完了後送信 */ + g_sendFlg = 1; + myled2 = 0; +} + + +void CommInit() /* 通信初期化 */ +{ + Fdiv = SystemCoreClock / (4 * 16 * 9600); // 9600bps +} + +void Communicaion(double data,int byte) +{ + + int i; + u64_dataType_g sendData; + sendData.DData = data; + + + LPC_PINCON->PINSEL0 &= ~(3 << 4); + LPC_PINCON->PINSEL0 |= (1 << 4); // TXD0 (01) + + LPC_SC->PCLKSEL0 &= ~(3 << 6); // PCLK_UART0 ck/4 (00) + LPC_SC->PCONP |= (1 << 3); // PCUART0 + + LPC_UART0->LCR |= (1 << 7); // enable access DLAB + LPC_UART0->DLL = Fdiv & 0xff; + LPC_UART0->DLM = (Fdiv >> 8) & 0xff; + LPC_UART0->LCR &= ~(1 << 7); // disable access DLAB + + LPC_UART0->LCR |= (3 << 0); // 8bit + LPC_UART0->FCR = (7 << 0); // RX1char(00), FIFO reset + LPC_UART0->IER = (1 << 0); // RBR + + for(i=0;i<8;i++) + { + LPC_UART0->THR =sendData.CData[i]; + } + + + NVIC_EnableIRQ(UART0_IRQn); + +} + +double InputAnalgData() /* A/D 読み取り */ +{ + double Result = 0; + + Result = (double)wave_in.read()*10*3.3; + + return Result; +} +