Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 837593dd2b | |||
| 0ffcea87d5 |
+9
-8
@@ -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))
|
||||
|
||||
+136
-71
@@ -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
|
||||
|
||||
+55
-25
@@ -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){
|
||||
|
||||
+1
-7
@@ -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++;
|
||||
}
|
||||
|
||||
-66
@@ -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){
|
||||
|
||||
+1
-8
@@ -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++;
|
||||
}
|
||||
|
||||
-162
@@ -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]
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
+3
-3
@@ -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:{
|
||||
|
||||
Reference in New Issue
Block a user