Created
September 12, 2020 20:46
-
-
Save dj1711572002/970d1d04091af54b1102c35a467928b5 to your computer and use it in GitHub Desktop.
MultiPort_USBSerialReceiving_SyncAccuracy_measurement_MasterCPU_mbed_NucleoL432KC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// AD7194 EVAL Board mbed NUCLEO 432KC SPIIF Program | |
// Differential 1Ch AIN1(+) AIN2(-) | |
//2019/03/23 Shinshu-Makers | |
#include "mbed.h" | |
SPI ad7194 (PA_7,PA_6,PA_5); //NUCLEO L432KC MOSI, MISO, SCLK | |
DigitalOut CS(PA_4); // Chip select | |
//-----Timing In from F446ZE----------------------- | |
DigitalOut timing(PA_8);//Timing signal | |
DigitalOut rst(PB_5); //Reset signal | |
int m;//data Counter | |
int period;//microsec | |
int ti,ti_1,tmi,tmi_1; //period | |
int inter,inter_1; | |
int t0,t0_1; | |
volatile int flag;//edge | |
//DigitalOut ADReset(p15); // Pin 15 is reset line for AD9850 | |
Serial pc(USBTX, USBRX); // tx, rx for debug terminal | |
Timer t; | |
Timer tmicro; | |
int i,j,k; | |
int dnum=0; | |
int MA=5;//Moving Average | |
int data,data0,data1,data2 ; | |
int sdata,sdata0,sdata1,mdata0,mdata1,mdata2,sdata_1; | |
int condata0,condata1,condata2; | |
int cReg0,cReg1; | |
float mV[6][1000]; | |
float mV0,mV1,mV2,mV3,mV4,mV5; | |
float mV0sum,mV1sum,mV2sum,mV3sum,mV4sum,mV5sum; | |
void ch_Change(int ch){ | |
char chN; | |
switch (ch){ | |
case 0: | |
chN=0x01; | |
break; | |
case 1: | |
chN=0x23; | |
break; | |
case 2: | |
chN=0x45; | |
break; | |
case 3: | |
chN=0x67; | |
break; | |
case 4: | |
chN=0x89; | |
break; | |
case 5: | |
chN=0xAB; | |
break; | |
} | |
//設定レジスタへ設定データ書き込み | |
ad7194.write(0x10);//設定レジスタ書き込み指定 | |
ad7194.write(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま | |
ad7194.write(chN) ;//設定レジスタ15-8bit書き込み=1CH設定 AIN1+ AIN1-(=AIN2) | |
ad7194.write(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128 | |
//Config書き込み確認 | |
ad7194.write(0x50);//Configレジスタ書き込み指定 | |
condata0=ad7194.write(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
condata1=ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
condata2=ad7194.write(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
ad7194.write(0x40);//status request | |
sdata=ad7194.write(0x0);//status read | |
//pc.printf("ch=%d,sdata=%x:condata:%x,%x,%x\n\r",ch,sdata,condata0,condata1,condata2); | |
} | |
int main() | |
{ | |
pc.baud(230400); | |
CS=0;//Chip Selct Low設定 | |
//set_AD7194(); | |
//MODEレジスタへモード設定データ書き込み | |
ad7194.write(0x08);//MODEレジスタ書き込み指定 | |
ad7194.write(0x08) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
ad7194.write(0x01) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
//mode書き込み確認 | |
ad7194.write(0x48);//MODEレジスタ書き込み指定 | |
mdata0=ad7194.write(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
mdata1=ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
mdata2=ad7194.write(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
//pc.printf("mdata:%x,%x,%x|n\r",mdata0,mdata1,mdata2); | |
//設定レジスタへ設定データ書き込み | |
ad7194.write(0x10);//設定レジスタ書き込み指定 | |
ad7194.write(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま pseudo=0 | |
ad7194.write(0x01) ;//設定レジスタ15-8bit書き込み=1CH設定 AIN1+ AIN1-(AIN2) | |
ad7194.write(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128 | |
//Config書き込み確認 | |
ad7194.write(0x50);//Configレジスタ書き込み指定 | |
condata0=ad7194.write(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz | |
condata1=ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま | |
condata2=ad7194.write(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定 | |
//pc.printf("mdata:%x,%x,%x,condata:%x,%x,%x|n\r",mdata0,mdata1,mdata2,condata0,condata1,condata2); | |
t.start(); | |
tmicro.start(); | |
i=0; | |
m=0; | |
flag=0;//edge 0 | |
while(1) | |
{ | |
ti=t.read_us(); | |
tmi=tmicro.read_us(); | |
period=ti-ti_1; | |
if (period>10000) | |
{ | |
timing=1;// edge=1 ADC Start | |
tmicro.reset(); | |
ti_1=ti; | |
for (i=0;i<6;i++) | |
{ | |
dnum++;//data set counter | |
ch_Change(i%6);//ch change configuration | |
ad7194.write(0x40);//status request | |
sdata_1=sdata0; | |
sdata0=ad7194.write(0x0);//status read | |
ad7194.write(0x58); | |
data0=ad7194.write(0x0); | |
data1=ad7194.write(0x0); | |
data2=ad7194.write(0x0); | |
mV[i%6][dnum%MA]=((float)data0*65536+(float)data1*256+(float)data2)/5084; | |
wait_us(1000);//WaitいれないとCH切り替えできない | |
//pc.printf("==============%4.1f,%x,%x,%x,%4.4f\n\r",mV,data0,data1,data2,t.read()); | |
//pc.printf("mV[%d][%d]=%5.2f\n\r",i%6,dnum%MA,mV[i%6][dnum%MA]); | |
} | |
//==========MOving Average======================== | |
mV0sum=0; | |
mV1sum=0; | |
mV2sum=0; | |
mV3sum=0; | |
mV4sum=0; | |
mV5sum=0; | |
for(j=0;j<MA;j++) | |
{ | |
mV0sum=mV0sum+mV[0][j]; | |
mV1sum=mV1sum+mV[1][j]; | |
mV2sum=mV2sum+mV[2][j]; | |
mV3sum=mV3sum+mV[3][j]; | |
mV4sum=mV4sum+mV[4][j]; | |
mV5sum=mV5sum+mV[5][j]; | |
} | |
mV0=(mV0sum/MA); | |
mV1=(mV1sum/MA); | |
mV2=(mV2sum/MA); | |
mV3=(mV3sum/MA); | |
mV4=(mV4sum/MA); | |
mV5=(mV5sum/MA); | |
//pc.printf("%d,%x,%x:,%4.0f,%4.0f,%4.0f,%4.0f,%4.0f,%4.0f,%4.3f\n\r",i,sdata_1,sdata0,mV[1],mV[2],mV[3],mV[4],mV[5],mV[0],t.read()); | |
//pc.printf("%d,%d,%d,%d,%d,%d,%d\n\r",mV1,mV2,mV3,mV4,mV5,mV0,t.read_ms()); | |
m++;//data Counter | |
timing=0;// edge falled | |
flag=timing.read(); | |
tmi_1=tmi-tmicro.read_us(); | |
t0=t.read_ms(); | |
pc.printf("%4.0f,%4.0f,%4.0f,%4.0f,%4.0f,%4.0f,%d,%d,%d,%d\n\r",mV1,mV2,mV3,mV4,mV5,mV0,flag,rst.read(),t0-t0_1,m); | |
//pc.printf("%4.3f,%d\n\r",mV1,t.read_ms()); | |
if(rst.read() == 1){rst=0;} | |
inter=t.read_ms(); | |
if(inter-inter_1>1000) | |
{ | |
t0_1=t0; | |
inter_1=inter; | |
rst=1; | |
m=0; | |
} | |
}//if end | |
} //while end | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment