Compare commits

...

2 Commits

Author SHA1 Message Date
YiChin 837593dd2b fix change level 2020-07-30 16:39:46 +08:00
YiChin 0ffcea87d5 update BOARDs calibration data. 2020-07-30 15:17:06 +08:00
9 changed files with 208 additions and 353 deletions
@@ -146,7 +146,6 @@ static void ReadVoutVolt(uint8_t *buf){
static void ReadCurrent(uint8_t *buf){
// Read data twice since the first data we get is previous data
ADCGainControl(INSTRUCTION.ADCGainLevel);
ADCChannelSelect(ADC_CH_CURRENT);
ADC_read(buf);
@@ -177,7 +176,7 @@ static void ReadBatVolt(uint8_t *buf){
/* for Elite1.4-re which 6.3kohm replaced by 10kohm */
// theoretical boundary <40, 30~1350, >1000 (uA)
#define GAIN_SMALL_BOUNDARY 40000 // 40 uA = 40,000,000 pA
#define GAIN_SMALL_BOUNDARY 35000 // 40 uA = 40,000,000 pA
#define GAIN_MID_BOUNDARY1 30000 // 30 uA = 30,000,000 pA
#define GAIN_MID_BOUNDARY2 1350000 // 1350 uA = 1350,000,000 pA
#define GAIN_LARGE_BOUNDARY 1000000 // 1000 uA = 1000,000 nA
@@ -188,6 +187,7 @@ static int32_t AutoGainReadCurrent(uint8_t *buf){
if(INSTRUCTION.ADCGainLevel == GAIN_AUTO){
INSTRUCTION.ADCGainLevel = GAIN_200R;
ADCGainControl(INSTRUCTION.ADCGainLevel);
}
ReadCurrent(spi_ADC_rxbuf);
@@ -204,13 +204,13 @@ static void AutoGainChange(int32_t Real_Current){
// switch to small range current
if (Real_Current < GAIN_MID_BOUNDARY1 && Real_Current > -1*GAIN_MID_BOUNDARY1){
GAIN_200K_counter++;
if(GAIN_200K_counter > 5){
if(GAIN_200K_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_200K;
GAIN_200K_counter = 0;
}
}else{
GAIN_10K_counter++;
if(GAIN_10K_counter > 5){
if(GAIN_10K_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_10K;
GAIN_10K_counter = 0;
}
@@ -228,7 +228,7 @@ static void AutoGainChange(int32_t Real_Current){
// switch to large range current
if(Real_Current > GAIN_MID_BOUNDARY2 || Real_Current < -1*GAIN_MID_BOUNDARY2){
GAIN_200R_counter++;
if(GAIN_200R_counter > 5){
if(GAIN_200R_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_200R;
GAIN_200R_counter = 0;
}
@@ -237,7 +237,7 @@ static void AutoGainChange(int32_t Real_Current){
// switch to small range current
else if (Real_Current < GAIN_MID_BOUNDARY1 && Real_Current > -1*GAIN_MID_BOUNDARY1){
GAIN_200K_counter++;
if(GAIN_200K_counter > 5){
if(GAIN_200K_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_200K;
GAIN_200K_counter = 0;
}
@@ -257,14 +257,14 @@ static void AutoGainChange(int32_t Real_Current){
// switch to large range current
if(Real_Current > GAIN_MID_BOUNDARY2 || Real_Current < -1*GAIN_MID_BOUNDARY2){
GAIN_200R_counter++;
if(GAIN_200R_counter > 5){
if(GAIN_200R_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_200R;
GAIN_200R_counter = 0;
}
}else{
GAIN_10K_counter++;
if(GAIN_10K_counter > 5){
if(GAIN_10K_counter > 2){
INSTRUCTION.ADCGainLevel = GAIN_10K;
GAIN_10K_counter = 0;
}
@@ -279,6 +279,7 @@ static void AutoGainChange(int32_t Real_Current){
}
}
}
ADCGainControl(INSTRUCTION.ADCGainLevel);
}
#define ReadADCVolt(x) ((x==0)? ReadVoutVolt(spi_ADC_rxbuf) : ReadVolt(spi_ADC_rxbuf))
@@ -5,6 +5,9 @@
#define Vset INSTRUCTION.Vset
#define DELTAVOLTMAX 100000
static void readIin(WorkMode *WorkModeData);
static int32_t readVinVout(WorkMode *WorkModeData);
/* Transform setting CC into IUC
*
* User code in CC mode : 0 ~ 3000000
@@ -59,85 +62,46 @@ static void CC_Plot(WorkMode *WorkModeData){
static int32_t VoltData = 0;
if(batteryCheck_flag){
if(ADCSwitch == 0){
if(BatSwitch == 0){ /**read Iin(buffer),read bat**/
if(INSTRUCTION.AutoGainEnable){
CURRENT_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(CURRENT_MODE->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
CURRENT_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
if(BatSwitch == 0){
if(ADCSwitch == 0){ /**read Iin(buffer),read bat**/
readIin(WorkModeData);
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
}else if(ADCSwitch == 1 || ADCSwitch == 3){ /**read Bat**/
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}
else if(ADCSwitch == 1 || ADCSwitch == 3){
if(BatSwitch == 0){ /**read Bat**/
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}
else if(ADCSwitch == 2){
if(BatSwitch == 0){ /**read V(buffer),read bat**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
if(CURRENT_MODE->_VoViSwitch == 0x01){
CURRENT_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVin;
}else if(CURRENT_MODE->_VoViSwitch == 0x00){
CURRENT_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVout;
}else if(ADCSwitch == 2){ /**read V(buffer),read bat**/
VoltData = readVinVout(WorkModeData);
if(INSTRUCTION.VoViSwitch == 0x02){
int32_t Vscan = (Vset / 200 - CURRENT_MODE->_measureVin);
Vscan = (int32_t)(Vscan);//[1uV]
InputNotify(NOTIFY_VOLT, Vscan);
}else{
InputNotify(NOTIFY_VOLT, VoltData);
}
InputNotify(NOTIFY_VOLT, VoltData);
DACenable(WorkModeData, VoltData, AFTER_READ_V);
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}else{
BatSwitch = 0;
if(ADCSwitch == 0){ /**read Iin(buffer),read V**/
if(INSTRUCTION.AutoGainEnable){
CURRENT_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(CURRENT_MODE->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
CURRENT_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
readIin(WorkModeData);
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
@@ -148,15 +112,7 @@ static void CC_Plot(WorkMode *WorkModeData){
ADCSwitch++;
}
else if(ADCSwitch == 2){ /**read V(buffer),read Iin**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
if(CURRENT_MODE->_VoViSwitch == 0x01 || CURRENT_MODE->_VoViSwitch == 0x02){
CURRENT_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVin;
}else if(CURRENT_MODE->_VoViSwitch == 0x00){
CURRENT_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVout;
}
VoltData = readVinVout(WorkModeData);
if(INSTRUCTION.VoViSwitch == 0x02){
int32_t Vscan = (Vset / 200 - CURRENT_MODE->_measureVin);
Vscan = (int32_t)(Vscan);//[1uV]
@@ -164,7 +120,6 @@ static void CC_Plot(WorkMode *WorkModeData){
}else{
InputNotify(NOTIFY_VOLT, VoltData);
}
DACenable(WorkModeData, VoltData, AFTER_READ_V);
ReadCurrent(spi_ADC_rxbuf);
@@ -248,4 +203,114 @@ static void CC_Vscan(CCMode *CC){
// RealV = (int32_t)(deltaV);
// InputNotify(NOTIFY_IMPEDANCE, RealV);
}
static void readIin(WorkMode *WorkModeData){
switch (INSTRUCTION.eliteFxn) {
case IT_CURVE:{
#define TEMP_MODE WorkModeData->IT
break;
}
case VT_CURVE:{
#define TEMP_MODE WorkModeData->VT
break;
}
case ZT_CURVE:{
#define TEMP_MODE WorkModeData->RT
break;
}
case IV_CURVE:{
#define TEMP_MODE WorkModeData->IV
break;
}
case CV_CURVE:{
#define TEMP_MODE WorkModeData->CV
break;
}
case CONSTANT_CURRENT:{
#define TEMP_MODE WorkModeData->CC
break;
}
case CYCLIC_VOLTAMMETRY:{
#define TEMP_MODE WorkModeData->CV3
break;
}
case LINEAR_SWEEP_VOLTAMMETRY:{
#define TEMP_MODE WorkModeData->LSV
break;
}
case CONSTANT_VSCAN:{
#define TEMP_MODE WorkModeData->CVSCAN
break;
}
default: {
break;
}
}
if(INSTRUCTION.AutoGainEnable){
TEMP_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(TEMP_MODE->_measureCurrent);
}else{
ADCGainControl(INSTRUCTION.ADCGainLevel);
ReadCurrent(spi_ADC_rxbuf);
TEMP_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
#undef TEMP_MODE
}
static int32_t readVinVout(WorkMode *WorkModeData){
switch (INSTRUCTION.eliteFxn) {
case IT_CURVE:{
#define TEMP_MODE WorkModeData->IT
break;
}
case VT_CURVE:{
#define TEMP_MODE WorkModeData->VT
break;
}
case ZT_CURVE:{
#define TEMP_MODE WorkModeData->RT
break;
}
case IV_CURVE:{
#define TEMP_MODE WorkModeData->IV
break;
}
case CV_CURVE:{
#define TEMP_MODE WorkModeData->CV
break;
}
case CONSTANT_CURRENT:{
#define TEMP_MODE WorkModeData->CC
break;
}
case CYCLIC_VOLTAMMETRY:{
#define TEMP_MODE WorkModeData->CV3
break;
}
case LINEAR_SWEEP_VOLTAMMETRY:{
#define TEMP_MODE WorkModeData->LSV
break;
}
case CONSTANT_VSCAN:{
#define TEMP_MODE WorkModeData->CVSCAN
break;
}
default: {
break;
}
}
static int32_t VoltData;
ReadADCVolt(TEMP_MODE->_VoViSwitch);
if(TEMP_MODE->_VoViSwitch == 0x01 || TEMP_MODE->_VoViSwitch == 0x02){
TEMP_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = TEMP_MODE->_measureVin;
}else if(TEMP_MODE->_VoViSwitch == 0x00){
TEMP_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = TEMP_MODE->_measureVout;
}
#undef TEMP_MODE
return VoltData;
}
#endif
@@ -29,7 +29,7 @@
*/
#define BOARD_7C73
#define BOARD_C754
typedef struct _formula{
@@ -1856,23 +1856,23 @@ struct _correction{
#ifdef BOARD_7A7A
{
.ADC_volt.coeff = (-6239226),
.ADC_volt.offset = 101648416123,
.ADC_volt.coeff = (-6238290),
.ADC_volt.offset = 101640702524,
.ADC_current[0].coeff = 31320381,
.ADC_current[0].offset = (-509857479468),
.ADC_current[0].coeff = 31311588,
.ADC_current[0].offset = (-509753111153),
.ADC_current[1].coeff = 1041193357,
.ADC_current[1].offset = (-16950619055581),
.ADC_current[1].coeff = 1038809417,
.ADC_current[1].offset = (-16910594805423),
.ADC_current[2].coeff = 31443823365,
.ADC_current[2].offset = (-511929468346784),
.ADC_current[2].coeff = 31046403466,
.ADC_current[2].offset = (-505503276105197),
.DAC2RealV.coeff = (-10582033),
.DAC2RealV.offset = 564855987100,
.DAC2RealV.coeff = (-10580571),
.DAC2RealV.offset = 564850587029,
.Usercode2DAC.coeff = (-10582033),
.Usercode2DAC.offset = 564855987100,
.Usercode2DAC.coeff = (-10580571),
.Usercode2DAC.offset = 564850587029,
.Gain0Boundary[0] = 0x5ECD,
.Gain0Boundary[1] = 0x5F0D,
@@ -2080,23 +2080,23 @@ struct _correction{
#ifdef BOARD_7C13
{
.ADC_volt.coeff = (-6245027),
.ADC_volt.offset = 101669958879,
.ADC_volt.coeff = (-6245031),
.ADC_volt.offset = 101664896458,
.ADC_current[0].coeff = 31035920,
.ADC_current[0].offset = (-505201713431),
.ADC_current[0].coeff = 31037865,
.ADC_current[0].offset = (-504943377203),
.ADC_current[1].coeff = 1042549550,
.ADC_current[1].offset = (-16963149966853),
.ADC_current[1].coeff = 1042483218,
.ADC_current[1].offset = (-16959178666094),
.ADC_current[2].coeff = 31216518956,
.ADC_current[2].offset = (-507929182679457),
.ADC_current[2].coeff = 31210947750,
.ADC_current[2].offset = (-507797633947551),
.DAC2RealV.coeff = (-10536388),
.DAC2RealV.offset = 562238536084,
.DAC2RealV.coeff = (-10540354),
.DAC2RealV.offset = 562115166023,
.Usercode2DAC.coeff = (-10536388),
.Usercode2DAC.offset = 562238536084,
.Usercode2DAC.coeff = (-10540354),
.Usercode2DAC.offset = 562115166023,
.Gain0Boundary[0] = 0x5ECD,
.Gain0Boundary[1] = 0x5F0D,
@@ -2189,6 +2189,36 @@ struct _correction{
.Gain1Boundary[1] = 0x64DD
};
#endif
#ifdef BOARD_5AB8
{
.ADC_volt.coeff = (-6244741),
.ADC_volt.offset = 101484124203,
.ADC_current[0].coeff = 31143061,
.ADC_current[0].offset = (-506157761578),
.ADC_current[1].coeff = 1040731620,
.ADC_current[1].offset = (-16913508709998),
.ADC_current[2].coeff = 31135073971,
.ADC_current[2].offset = (-506054092416558),
.DAC2RealV.coeff = (-10535403),
.DAC2RealV.offset = 559978960747,
.Usercode2DAC.coeff = (-10535403),
.Usercode2DAC.offset = 559978960747,
.Gain0Boundary[0] = 0x5ECD,
.Gain0Boundary[1] = 0x5F0D,
.Gain1Boundary[0] = 0x5900,
.Gain1Boundary[1] = 0x64DD
};
#endif
// this function turn ADC measure value (0xXXXX) into real voltage
// unit should be uV
static int32_t DecodeADCVolt(uint16_t ADC_measure){
@@ -55,13 +55,7 @@ static void IT_Plot(WorkMode *WorkModeData) {
}
}else{
if(ADCSwitch == 0){ /**read Iin(buffer)**/
if(INSTRUCTION.AutoGainEnable){
CURRENT_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(CURRENT_MODE->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
CURRENT_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
readIin(WorkModeData);
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
ADCSwitch++;
}
@@ -102,72 +102,6 @@ static uint16_t OneWayVoltScan() {
return DACOutCode;
}
static void IV_Plot(IVMode *IV) {
/**********************************************
CURRENT_MODE->_VoViSwitch : 1 read Vin volt
->_VoViSwitch : 0 read Vout volt
***********************************************/
static uint8_t VoltCurrentSwitch = 0;
if(VoltCurrentSwitch == 0){ /**read Iin(buffer),read Vin**/
// read current
if(INSTRUCTION.AutoGainEnable){
IV->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(IV->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
IV->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
OneWayVoltScan();
InputNotify(NOTIFY_CURRENT, IV->_measureCurrent);
// read Volt
if(IV->_VoViSwitch == 0x01){
ReadVolt(spi_ADC_rxbuf);
}else if(IV->_VoViSwitch == 0x00){
ReadVoutVolt(spi_ADC_rxbuf);
}
VoltCurrentSwitch++;
}
else if(VoltCurrentSwitch == 1){ /**read Vin**/
// read Volt
if(IV->_VoViSwitch == 0x01){
ReadVolt(spi_ADC_rxbuf);
}else if(IV->_VoViSwitch == 0x00){
ReadVoutVolt(spi_ADC_rxbuf);
}
VoltCurrentSwitch++;
}
else if(VoltCurrentSwitch == 2){ /**read Vin(buffer),read Iin**/
// read Volt
if(IV->_VoViSwitch == 0x01){
ReadVolt(spi_ADC_rxbuf);
IV->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
}else if(IV->_VoViSwitch == 0x00){
ReadVoutVolt(spi_ADC_rxbuf);
IV->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
}
InputNotify(NOTIFY_VOLT, IV->_measureVin);
// read current
ReadCurrent(spi_ADC_rxbuf);
VoltCurrentSwitch++;
}
else if(VoltCurrentSwitch == 3){ /**read Iin**/
// read current
ReadCurrent(spi_ADC_rxbuf);
VoltCurrentSwitch = 0;
}
}
static void IV_Vscan(IVMode *IV){
if(vscanReset){
if(INSTRUCTION.directionInit == 1){
@@ -60,14 +60,7 @@ static void VT_Plot(WorkMode *WorkModeData) {
}
}else{
if(ADCSwitch == 0){ /**read V(buffer)**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
if(CURRENT_MODE->_VoViSwitch == 0x01){
CURRENT_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVin;
}else if(CURRENT_MODE->_VoViSwitch == 0x00){
CURRENT_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVout;
}
VoltData = readVinVout(WorkModeData);
InputNotify(NOTIFY_VOLT, VoltData);
ADCSwitch++;
}
@@ -8,168 +8,6 @@
// change the output voltage step
// => get a R-T curve (with resolution = 1 sample/volt step )
static void ZT_Plot(WorkMode *WorkModeData) {
switch (INSTRUCTION.eliteFxn) {
case IT_CURVE:{
#define CURRENT_MODE WorkModeData->IT
break;
}
case VT_CURVE:{
#define CURRENT_MODE WorkModeData->VT
break;
}
case ZT_CURVE:{
#define CURRENT_MODE WorkModeData->RT
break;
}
case IV_CURVE:{
#define CURRENT_MODE WorkModeData->IV
break;
}
case CV_CURVE:{
#define CURRENT_MODE WorkModeData->CV
break;
}
case CONSTANT_CURRENT:{
#define CURRENT_MODE WorkModeData->CC
break;
}
case CYCLIC_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->CV3
break;
}
case LINEAR_SWEEP_VOLTAMMETRY:{
#define CURRENT_MODE WorkModeData->LSV
break;
}
case CONSTANT_VSCAN:{
#define CURRENT_MODE WorkModeData->CVSCAN
break;
}
default: {
break;
}
}
static uint8_t ADCSwitch = 0;
static uint8_t BatSwitch = 0;
static int32_t VoltData = 0;
if(batteryCheck_flag){
if(ADCSwitch == 0){
if(BatSwitch == 0){ /**read Iin(buffer),read bat**/
if(INSTRUCTION.AutoGainEnable){
CURRENT_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(CURRENT_MODE->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
CURRENT_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}
else if(ADCSwitch == 1 || ADCSwitch == 3){
if(BatSwitch == 0){ /**read Bat**/
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}
else if(ADCSwitch == 2){
if(BatSwitch == 0){ /**read V(buffer),read bat**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
if(CURRENT_MODE->_VoViSwitch == 0x01){
CURRENT_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVin;
}else if(CURRENT_MODE->_VoViSwitch == 0x00){
CURRENT_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVout;
}
InputNotify(NOTIFY_VOLT, VoltData);
DACenable(WorkModeData, VoltData, AFTER_READ_V);
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 1){
ReadBatVolt(spi_ADC_rxbuf);
BatSwitch++;
}else if(BatSwitch == 2){
headstage_battery_volt();
ReadCurrent(spi_ADC_rxbuf);
batteryCheck_flag = false;
BatSwitch = 0;
ADCSwitch = 3;
}
}
}else{
BatSwitch = 0;
if(ADCSwitch == 0){ /**read Iin(buffer),read V**/
if(INSTRUCTION.AutoGainEnable){
CURRENT_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(CURRENT_MODE->_measureCurrent);
}else{
ReadCurrent(spi_ADC_rxbuf);
CURRENT_MODE->_measureCurrent = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_CURRENT, spi_ADC_rxbuf);
}
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
ADCSwitch++;
}
else if(ADCSwitch == 1){ /**read V**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
ADCSwitch++;
}
else if(ADCSwitch == 2){ /**read V(buffer),read Iin**/
ReadADCVolt(CURRENT_MODE->_VoViSwitch);
if(CURRENT_MODE->_VoViSwitch == 0x01){
CURRENT_MODE->_measureVin = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_VOLT, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVin;
}else if(CURRENT_MODE->_VoViSwitch == 0x00){
CURRENT_MODE->_measureVout = DecodeADCValue(INSTRUCTION.ADCGainLevel, ADC_CH_DAC, spi_ADC_rxbuf);
VoltData = CURRENT_MODE->_measureVout;
}
InputNotify(NOTIFY_VOLT, VoltData);
DACenable(WorkModeData, VoltData, AFTER_READ_V);
ReadCurrent(spi_ADC_rxbuf);
ADCSwitch++;
}
else if(ADCSwitch == 3){ /**read Iin**/
ReadCurrent(spi_ADC_rxbuf);
ADCSwitch = 0;
}
}
#undef CURRENT_MODE
}
static void ZT_Vscan(RTMode *RT){
if(vscanReset){
Vset = ((int32_t)(INSTRUCTION.VoltConstant) - 25000) * 4 * 10000; //[5nV]
@@ -4,9 +4,9 @@
#define VERSION_DATE_YEAR 20
#define VERSION_DATE_MONTH 7
#define VERSION_DATE_DAY 20
#define VERSION_DATE_HOUR 18
#define VERSION_DATE_MINUTE 34
#define VERSION_DATE_DAY 30
#define VERSION_DATE_HOUR 16
#define VERSION_DATE_MINUTE 39
// this is NOT the version hash !!
// it's the last version hash
@@ -212,11 +212,11 @@ static void SimpleBLEPeripheral_performPeriodicTask(WorkMode *WorkModeData) {
static void EliteADCControl(WorkMode *WorkModeData) {
switch (INSTRUCTION.eliteFxn) {
case IV_CURVE:{
ZT_Plot(WorkModeData);
CC_Plot(WorkModeData);
break;
}
case CV_CURVE:{
ZT_Plot(WorkModeData);
CC_Plot(WorkModeData);
break;
}
case IT_CURVE:{
@@ -228,7 +228,7 @@ static void EliteADCControl(WorkMode *WorkModeData) {
break;
}
case ZT_CURVE:{
ZT_Plot(WorkModeData);
CC_Plot(WorkModeData);
break;
}
case CONSTANT_CURRENT:{