Skip to content

Instantly share code, notes, and snippets.

@dj1711572002
Created August 15, 2020 18:47
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/5122a210c2921e6569978d0e8c77ae37 to your computer and use it in GitHub Desktop.
Save dj1711572002/5122a210c2921e6569978d0e8c77ae37 to your computer and use it in GitHub Desktop.
M5Atom_SPI_AD7194EVAL board 6CH StrainGaugeBridges
//AD7194 M5Atom SPI test
//2020.08.16 Shinshu-Makers
#include <M5StickC.h>
#include <SPI.h>
int i=0,j=0;
int MA=10;
uint8_t data0,data1,data2;
uint8_t recvdata;
uint8_t mdata0,mdata1,mdata2;
uint8_t condata0,condata1,condata2;
uint8_t stdata0,stdata1,stdata2,stdata3;
uint8_t sdata;
//float mV0,mV1,mV2,mV3;
//==========data Movng Average parameters ===================
double mV0arry[500];
double mV1arry[500];
double mV2arry[500];
double mV3arry[500];
double mV4arry[500];
double mV53arry[500];
//double mV3arry[100];
double mV0sum,mV1sum,mV2sum,mV3sum,mV4sum,mV5sum;
double mV0ave,mV1ave,mV2ave,mV3ave,mV4ave,mV5ave;
double mV0,mV1,mV2,mV3,mV4,mV5;
double mVA[6];
//=========================================================================
//====================AD7194 CH change=====================================
//=========================================================================
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;
}
//設定レジスタへ設定データ書き込み
recvdata= SPI.transfer(0x10);//設定レジスタ書き込み指定
recvdata= SPI.transfer(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま
recvdata= SPI.transfer(chN) ;//設定レジスタ15-8bit書き込み=1CH設定 AIN1+ AIN1-(=AIN2)
recvdata= SPI.transfer(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128
//Config書き込み確認
recvdata= SPI.transfer(0x50);//Configレジスタ書き込み指定
condata0=recvdata= SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
condata1=recvdata= SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
condata2=recvdata= SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
recvdata= SPI.transfer(0x40);//status request
sdata= SPI.transfer(0x0);//status read
//Serial.print("status=");
//Serial.println(sdata);
//pc.printf("ch=%d,sdata=%x:condata:%x,%x,%x\n\r",ch,sdata,condata0,condata1,condata2);
}
//=============================================================================
//=============================================================================
//=============================================================================
//====================================AD7194 Initialize===========================================================
//##########################################################################
int AD7194_init(){
//**************************AD7194 Set*******************************************************
delay(1);
//set_AD7194();
//MODEレジスタへモード設定データ書き込み
recvdata= SPI.transfer(0x08);//MODEレジスタ書き込み指定
recvdata= SPI.transfer(0x08) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
recvdata= SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
recvdata= SPI.transfer(0x01) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
//mode書き込み確認
recvdata= SPI.transfer(0x48);//MODEレジスタ書き込み指定
mdata0=SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
mdata1=SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
mdata2=SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
// pc.printf("INIT:mdata:%x,%x,%x\n\r",mdata0,mdata1,mdata2);
//設定レジスタへ設定データ書き込み
recvdata= SPI.transfer(0x10);//設定レジスタ書き込み指定
recvdata= SPI.transfer(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま
recvdata= SPI.transfer(0x01) ;//設定レジスタ15-8bit書き込み=1ch-4ch自動スキャン設定 AIN1+ AIN2-
recvdata= SPI.transfer(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128
//Config書き込み確認
recvdata= SPI.transfer(0x50);//Configレジスタ書き込み指定
condata0=SPI.transfer(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
condata1=SPI.transfer(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
condata2=SPI.transfer(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
}
//*****************************************************************************************************************
//*****************************************************************************************************************************
void setup() {
M5.begin();
// put your setup code here, to run once:
SPI.begin(19,33,23,-1);//sclk,MISO,MOSI,SS=CS=GND
// MODE register writing
AD7194_init();//Initialize AD7194
}
void loop() {
i++;
ch_Change(i%6);
recvdata=SPI.transfer(0x58);
delay(1);//1msec以上WaitいれないとCH切り替えできない
data0=SPI.transfer(0x0);
data1=SPI.transfer(0x0);
data2=SPI.transfer(0x0);
mVA[i%6]=((double)data0*65536+(double)data1*256+(double)data2)/5084; //No MA
//mV0arry[i%MA]=((double)data0*65536+(double)data1*256+(double)data2)/5084;
delay(1);//1msec以上WaitいれないとCH切り替えできない
recvdata= SPI.transfer(0x40);//status request
sdata= SPI.transfer(0x0);//status read
//Serial.print("status=");
// Serial.println(sdata,HEX);
if(i%6==0)
{
Serial.print(mVA[0],1);
Serial.print(",");
Serial.print(mVA[1],1);
Serial.print(",");
Serial.print(mVA[2],1);
Serial.print(",");
Serial.print(mVA[3],1);
Serial.print(",");
Serial.print(mVA[4],1);
Serial.print(",");
Serial.print(mVA[5],1);
Serial.print(",");
Serial.print(sdata,HEX);
Serial.print(",");
Serial.println(millis());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment