Skip to content

Instantly share code, notes, and snippets.

@dj1711572002
Created September 12, 2020 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dj1711572002/970d1d04091af54b1102c35a467928b5 to your computer and use it in GitHub Desktop.
Save dj1711572002/970d1d04091af54b1102c35a467928b5 to your computer and use it in GitHub Desktop.
MultiPort_USBSerialReceiving_SyncAccuracy_measurement_MasterCPU_mbed_NucleoL432KC
// 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