improve mode instruction, and change it & rt & vo volt anytime
This commit is contained in:
+88
-2
@@ -47,6 +47,8 @@ static void iv_vscan(void)
|
||||
Vset = Vset - iv->_Vstep * GPT.GptimerMultiple;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void iv_cy_vscan(void)
|
||||
@@ -127,6 +129,8 @@ static void iv_cy_vscan(void)
|
||||
PeriodicEvent = false;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void it_vscan(void)
|
||||
@@ -140,6 +144,8 @@ static void it_vscan(void)
|
||||
if(!vscanReset) {
|
||||
Vset = it->_Vinit;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void rt_vscan(void)
|
||||
@@ -153,6 +159,8 @@ static void rt_vscan(void)
|
||||
if(!vscanReset) {
|
||||
Vset = rt->_Vinit;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void vo_vscan(void)
|
||||
@@ -166,6 +174,8 @@ static void vo_vscan(void)
|
||||
if(!vscanReset) {
|
||||
Vset = vo->_Vinit;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#define DELTAVOLTMAX 2000000 //2000000 = 10mV
|
||||
@@ -238,6 +248,8 @@ static void cc_vscan(void)
|
||||
Vset = cc->_Vmax;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void cv_vscan(void)
|
||||
@@ -246,7 +258,8 @@ static void cv_vscan(void)
|
||||
static bool VminCounter;
|
||||
static bool VmaxCounter;
|
||||
|
||||
NotifyCycleNumber = (instru.cycleNumber - cv->_cycleNumber + 1);
|
||||
//NotifyCycleNumber = (instru.cycleNumber - cv->_cycleNumber + 1);
|
||||
|
||||
|
||||
if (vscanReset) {
|
||||
VmaxCounter = false;
|
||||
@@ -342,6 +355,8 @@ static void cv_vscan(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void lsv_vscan(void)
|
||||
@@ -384,6 +399,8 @@ static void lsv_vscan(void)
|
||||
PeriodicEvent = false;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void ca_vscan(void)
|
||||
@@ -397,12 +414,13 @@ static void ca_vscan(void)
|
||||
if(!vscanReset){
|
||||
Vset = ca->_Vinit;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void uni_pulse_vscan(uint32_t time)
|
||||
{
|
||||
|
||||
uint32_t t = time;
|
||||
struct wm_uni_pulse_ctx_t *p = (struct wm_uni_pulse_ctx_t *)wm_get();
|
||||
uint32_t m;
|
||||
@@ -453,6 +471,8 @@ static void uni_pulse_vscan(uint32_t time)
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void pulse_vscan(void)
|
||||
@@ -563,8 +583,74 @@ static void pulse_vscan(void)
|
||||
DAC_outputV(Usercode_Correction_to_DAC(VOUT_GAIN_240K, pulse->_sti_v));
|
||||
DAC_outputV(Usercode_Correction_to_DAC(VOUT_GAIN_240K, pulse->_sti_v));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void chg_vo_para(uint16_t parameter, int32_t value)
|
||||
{
|
||||
uint16_t pa = parameter;
|
||||
int32_t val = value;
|
||||
struct wm_vo_ctx_t *vo = (struct wm_vo_ctx_t *)wm_get();
|
||||
|
||||
if (pa == DAC_VOLT) {
|
||||
vo->_Vinit = val;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void chg_it_para(uint16_t parameter, int32_t value)
|
||||
{
|
||||
uint16_t pa = parameter;
|
||||
int32_t val = value;
|
||||
struct wm_it_ctx_t *it = (struct wm_it_ctx_t *)wm_get();
|
||||
|
||||
if (pa == DAC_VOLT) {
|
||||
it->_Vinit = val;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void chg_rt_para(uint16_t parameter, int32_t value)
|
||||
{
|
||||
uint16_t pa = parameter;
|
||||
int32_t val = value;
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
|
||||
if (pa == DAC_VOLT) {
|
||||
rt->_Vinit = val;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void set_para(uint8_t eliteFxn, uint16_t parameter, int32_t value)
|
||||
{
|
||||
uint8_t mode = eliteFxn;
|
||||
uint16_t pa = parameter;
|
||||
int32_t val = value;
|
||||
|
||||
if (mode == CURVE_VO) {
|
||||
chg_vo_para(pa, val);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == CURVE_IT) {
|
||||
chg_it_para(pa, val);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == CURVE_RT) {
|
||||
chg_rt_para(pa, val);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+3
@@ -24,6 +24,7 @@ struct HEADSTAGE_INSTRUCTION {
|
||||
int32_t Vinit;
|
||||
int32_t Vmax;
|
||||
int32_t Vmin;
|
||||
uint32_t steptime;
|
||||
|
||||
/** ADC parameter **/
|
||||
uint32_t sampleRate;
|
||||
@@ -31,6 +32,7 @@ struct HEADSTAGE_INSTRUCTION {
|
||||
uint8_t AutoGainEnable;
|
||||
uint8_t VinAutoGainEnable;
|
||||
uint8_t VoutAutoGainEnable;
|
||||
bool hign_z_en;
|
||||
uint8_t IinADCGainLv;
|
||||
// voltage output gain
|
||||
uint16_t VoutGainLevel;
|
||||
@@ -141,6 +143,7 @@ static void InitEliteInstruction(){
|
||||
instru.StepTime = STEPTIME_ONE_SEC;
|
||||
instru.AdcChannel = 0; // RIS_ADC_IIN: 0x00, RIS_ADC_VIN: 0x01, RIS_DAC_VOUT: 0x02, RIS_HIGH_Z: 0x03
|
||||
instru.gain_switch_on = 0b11110000; // cur auto gain switch, |lv0|lv1|lv2|lv3|none|none|none|none|
|
||||
instru.hign_z_en = 1;
|
||||
|
||||
//pulse mode
|
||||
instru.sti_t1 = 0;
|
||||
|
||||
+7
-2
@@ -26,20 +26,25 @@ enum all_mode_e {
|
||||
CURVE_VO = 0x03, // Function Generator //0x30,
|
||||
CURVE_RT = 0x04, // R-T Graph //0x40,
|
||||
CURVE_VT = 0x05, // V-T Graph //0x50,
|
||||
CURVE_IT = 0x0D, // I-T Graph //0x60,
|
||||
CURVE_IT = 0x06, // I-T Graph //0x60,
|
||||
CURVE_CC = 0x07, // Constant Current (CC) //0xD0,
|
||||
CURVE_OCP = 0x08, // Open Circuit Potential (OCP)
|
||||
CURVE_CV = 0x09, // Cyclic Voltammetry (CV) //0xC0,
|
||||
CURVE_LSV = 0x0A, // Linear Sweep Voltammetry (LSV) //0x02,
|
||||
CURVE_CA = 0x0B, // Chronoamperometric Graph (CA) //0x03,
|
||||
CURVE_PULSE = 0x0C, //0x94,
|
||||
CURVE_UNI_PULSE = 0x06, // universal pulse
|
||||
CURVE_UNI_PULSE = 0x0D, // universal pulse
|
||||
|
||||
CURVE_CALI_ADC = 0xF1, // Cali ADC - test //0x92,
|
||||
|
||||
|
||||
SET_SAMPLE_RATE = 0xE0, //0x70,
|
||||
SET_ADC_DAC_GAIN = 0xE1, //0x80,
|
||||
SET_PARA = 0xE2
|
||||
};
|
||||
|
||||
enum set_para_e {
|
||||
DAC_VOLT = 0x01,
|
||||
};
|
||||
|
||||
// CIS (control instruction)
|
||||
|
||||
+127
-58
@@ -661,13 +661,16 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
instru.directionInit = VDIRECTION(instru.Ve1,instru.Ve2);
|
||||
instru.notifyRate = (uint32_t)(ins[9]);
|
||||
instru.notifyRate = OldStep2NewStepTime(instru.notifyRate); //5000;10000;20000;
|
||||
instru.steptime = (uint32_t)(ins[9]);
|
||||
instru.steptime = OldStep2NewStepTime(instru.steptime); //5000;10000;20000;
|
||||
instru.step = ((uint32_t)(ins[7]) << 8) | (uint32_t)(ins[8]);//1~1000 = 0.1mv ~ 100mv
|
||||
instru.step = instru.step * 100000 / instru.notifyRate;
|
||||
instru.step = instru.step * 100000 / instru.steptime;
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = 1;
|
||||
instru.hign_z_en = ~(ins[11] & 0x0F);
|
||||
instru.notifyRate = ((uint32_t)ins[12] << 8) | (uint32_t)ins[13];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -699,13 +702,16 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
instru.directionInit = VDIRECTION(instru.Ve1,instru.Ve2);
|
||||
instru.notifyRate = (uint32_t)(ins[9]);
|
||||
instru.notifyRate = OldStep2NewStepTime(instru.notifyRate); //5000;10000;20000;
|
||||
instru.steptime = (uint32_t)(ins[9]);
|
||||
instru.steptime = OldStep2NewStepTime(instru.steptime); //5000;10000;20000;
|
||||
instru.step = ((uint32_t)(ins[7]) << 8) | (uint32_t)(ins[8]);//1~1000 = 0.1mv ~ 100mv
|
||||
instru.step = instru.step * 100000 / instru.notifyRate;
|
||||
instru.step = instru.step * 100000 / instru.steptime;
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = ((uint16_t)(ins[10]) << 8) | (uint16_t)(ins[11]);
|
||||
instru.hign_z_en = ~(ins[13] & 0x0F);
|
||||
instru.notifyRate = ((uint32_t)ins[14] << 8) | (uint32_t)ins[15];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -732,6 +738,7 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.eliteFxn = CURVE_VO;
|
||||
instru.Ve1 = ((uint16_t)ins[3] << 8) | (uint16_t)ins[4];
|
||||
instru.Vinit = (int32_t)instru.Ve1;
|
||||
instru.hign_z_en = ~(ins[6] & 0x0F);
|
||||
|
||||
if(instru.Ve1 < DAC_VOUT_GAIN_LARGE_BOUNDARY_USERCODE && instru.Ve1 > DAC_VOUT_GAIN_LARGE_BOUNDARY1_USERCODE){
|
||||
instru.VoutGainLevel = VOUT_GAIN_15K;
|
||||
@@ -739,7 +746,7 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
}
|
||||
|
||||
instru.notifyRate = ((uint32_t)ins[5] << 8) | (uint32_t)ins[6];
|
||||
instru.notifyRate = ((uint32_t)ins[7] << 8) | (uint32_t)ins[8];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
|
||||
@@ -755,10 +762,10 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
// TODO: input to json
|
||||
instru.AutoGainEnable = 1;
|
||||
instru.IinADCGainLv = I_GAIN_100R;
|
||||
IinADCGainCtrl(instru.IinADCGainLv);
|
||||
// IinADCGainCtrl(instru.IinADCGainLv);
|
||||
instru.VinAutoGainEnable = 1;
|
||||
instru.VinADCGainLv = VIN_GAIN_1K;
|
||||
VinADCGainCtrl(instru.VinADCGainLv);
|
||||
// VinADCGainCtrl(instru.VinADCGainLv);
|
||||
// end
|
||||
ModeLED(WORKING);
|
||||
|
||||
@@ -767,13 +774,14 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
|
||||
case CURVE_RT: {
|
||||
instru.eliteFxn = CURVE_RT;
|
||||
instru.notifyRate = ((uint32_t)ins[3] << 8) | (uint32_t)ins[4];
|
||||
instru.notifyRate = ((uint32_t)ins[7] << 8) | (uint32_t)ins[8];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
instru.VsetRate = 2;
|
||||
// instru.Ve1 = 25000 + 5000; // Vout = 0.1 V at RT mode
|
||||
instru.Ve1 = ((uint16_t)ins[5] << 8) | (uint16_t)ins[6];
|
||||
instru.Ve1 = ((uint16_t)ins[3] << 8) | (uint16_t)ins[4];
|
||||
instru.Vinit = (int32_t)instru.Ve1;
|
||||
instru.hign_z_en = ~(ins[6] & 0x0F);
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -787,10 +795,10 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
// TODO: input to json
|
||||
instru.AutoGainEnable = 1;
|
||||
instru.IinADCGainLv = I_GAIN_100R;
|
||||
IinADCGainCtrl(instru.IinADCGainLv);
|
||||
// IinADCGainCtrl(instru.IinADCGainLv);
|
||||
instru.VinAutoGainEnable = 1;
|
||||
instru.VinADCGainLv = VIN_GAIN_1K;
|
||||
VinADCGainCtrl(instru.VinADCGainLv);
|
||||
// VinADCGainCtrl(instru.VinADCGainLv);
|
||||
// end
|
||||
|
||||
if(instru.Ve1 < DAC_VOUT_GAIN_LARGE_BOUNDARY_USERCODE && instru.Ve1 > DAC_VOUT_GAIN_LARGE_BOUNDARY1_USERCODE){
|
||||
@@ -806,9 +814,10 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
|
||||
case CURVE_VT: {
|
||||
instru.eliteFxn = CURVE_VT;
|
||||
instru.notifyRate = ((uint32_t)ins[3] << 8) | (uint32_t)ins[4];
|
||||
instru.notifyRate = ((uint32_t)ins[5] << 8) | (uint32_t)ins[6];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
instru.hign_z_en = ~(ins[4] & 0x0F);
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -826,7 +835,7 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
|
||||
case CURVE_OCP: {
|
||||
instru.eliteFxn = CURVE_OCP;
|
||||
instru.notifyRate = ((uint32_t)ins[3] << 8) | (uint32_t)ins[4];
|
||||
instru.notifyRate = ((uint32_t)ins[5] << 8) | (uint32_t)ins[6];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
|
||||
@@ -846,11 +855,12 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
|
||||
case CURVE_IT: {
|
||||
instru.eliteFxn = CURVE_IT;
|
||||
instru.notifyRate = ((uint32_t)ins[3] << 8) | (uint32_t)ins[4];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.notifyRate = ((uint32_t)ins[7] << 8) | (uint32_t)ins[8];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
instru.Ve1 = ((uint16_t)ins[5] << 8) | (uint16_t)ins[6];
|
||||
instru.Ve1 = ((uint16_t)ins[3] << 8) | (uint16_t)ins[4];
|
||||
instru.Vinit = (int32_t)instru.Ve1;
|
||||
instru.hign_z_en = ~(ins[6] & 0x0F);
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -873,16 +883,17 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
}
|
||||
|
||||
case CURVE_CC: {
|
||||
instru.eliteFxn = CURVE_CC;
|
||||
instru.notifyRate = ((uint32_t)ins[12] << 8) | (uint32_t)ins[13];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
instru.charge = ins[3]; //0:discharge 1:charge
|
||||
instru.eliteFxn = CURVE_CC;
|
||||
instru.notifyRate = ((uint32_t)ins[14] << 8) | (uint32_t)ins[15];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.sampleRate = 15;
|
||||
instru.charge = ins[3]; //0:discharge 1:charge
|
||||
instru.constantCurrent = (uint32_t)(ins[4]) << 24 | (uint32_t)(ins[5]) << 16 | (uint32_t)(ins[6]) << 8 | (uint32_t)(ins[7]);
|
||||
instru.Vmax = (uint32_t)(ins[8]) << 8 | (uint32_t)(ins[9]);
|
||||
instru.Vmin = (uint32_t)(ins[10]) << 8 | (uint32_t)(ins[11]);
|
||||
instru.hign_z_en = ~(ins[13] & 0x0F);
|
||||
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
@@ -904,7 +915,7 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
}
|
||||
|
||||
case CURVE_CV: {
|
||||
if (ins[3] == PARA_1) {
|
||||
if (ins[3] == PARA_1) { //370209 01 61A8 6B6C 57E4 00002710 0016E360
|
||||
instru.sampleRate = 15;
|
||||
instru.Vinit = ((int32_t)(ins[4]) << 8) | (int32_t)(ins[5]);
|
||||
instru.Ve1 = ((uint16_t)(ins[6]) << 8) | (uint16_t)(ins[7]);
|
||||
@@ -916,11 +927,22 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
} else if (instru.Vinit <= instru.Ve1 || instru.Vinit == instru.Vmin){
|
||||
instru.directionInit = 1;
|
||||
}
|
||||
} else if (ins[3] == PARA_2) {
|
||||
|
||||
//controller UI 0.01~1000mv send to Elite 1~100000
|
||||
instru.step = (uint32_t)(ins[10]) << 24 | (uint32_t)(ins[11]) << 16 | (uint32_t)(ins[12]) << 8 | (uint32_t)(ins[13]);
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
|
||||
instru.Currentmax = (int32_t)(ins[14]) << 24 | (int32_t)(ins[15]) << 16 | (int32_t)(ins[16]) << 8 | (int32_t)(ins[17]);
|
||||
|
||||
|
||||
} else if (ins[3] == PARA_2) { // 370609 02 0005 4321 000A
|
||||
instru.eliteFxn = CURVE_CV;
|
||||
instru.Currentmax = (int32_t)(ins[10]) << 24 | (int32_t)(ins[11]) << 16 | (int32_t)(ins[12]) << 8 | (int32_t)(ins[13]);
|
||||
instru.cycleNumber = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]);
|
||||
instru.notifyRate = (uint32_t)(ins[8]) << 8 | (uint32_t)(ins[9]);
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.hign_z_en = ~(ins[7] & 0x0F);
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
instru.gain_switch_on = 0b11110000;
|
||||
@@ -930,11 +952,7 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.gain_switch_on = 0b01110000;
|
||||
}
|
||||
|
||||
//controller UI 0.01~1000mv send to Elite 1~100000
|
||||
instru.step = (uint32_t)(ins[4]) << 24 | (uint32_t)(ins[5]) << 16 | (uint32_t)(ins[6]) << 8 | (uint32_t)(ins[7]);
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = ((uint16_t)(ins[14]) << 8) | (uint16_t)(ins[15]);
|
||||
|
||||
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
ModeLED(WORKING);
|
||||
@@ -944,36 +962,42 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
}
|
||||
|
||||
case CURVE_LSV: {
|
||||
instru.eliteFxn = CURVE_LSV;
|
||||
instru.sampleRate = 15;
|
||||
instru.Ve1 = ((uint16_t)(ins[3]) << 8) | (uint16_t)(ins[4]);
|
||||
instru.Ve2 = ((uint16_t)(ins[5]) << 8) | (uint16_t)(ins[6]);
|
||||
instru.Vinit = (int32_t)instru.Ve1;
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
instru.directionInit = VDIRECTION(instru.Ve1,instru.Ve2);
|
||||
instru.Currentmax = (int32_t)(ins[13]) << 24 | (int32_t)(ins[14]) << 16 | (int32_t)(ins[15]) << 8 | (int32_t)(ins[16]);
|
||||
instru.notifyRate = (uint32_t)(ins[11]) << 8 | (uint32_t)(ins[12]);
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
//controller UI 0.01~1000mv send to Elite 1~100000
|
||||
instru.step = (uint32_t)(ins[7]) << 24 | (uint32_t)(ins[8]) << 16 | (uint32_t)(ins[9]) << 8 | (uint32_t)(ins[10]);
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = 1;//ins[17];
|
||||
if (ins[3] == PARA_1) {
|
||||
instru.sampleRate = 15;
|
||||
instru.Ve1 = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]);
|
||||
instru.Ve2 = ((uint16_t)(ins[6]) << 8) | (uint16_t)(ins[7]);
|
||||
instru.Vinit = (int32_t)instru.Ve1;
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
instru.directionInit = VDIRECTION(instru.Ve1,instru.Ve2);
|
||||
instru.Currentmax = (int32_t)(ins[12]) << 24 | (int32_t)(ins[13]) << 16 | (int32_t)(ins[14]) << 8 | (int32_t)(ins[15]);
|
||||
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
//controller UI 0.01~1000mv send to Elite 1~100000
|
||||
instru.step = (uint32_t)(ins[8]) << 24 | (uint32_t)(ins[9]) << 16 | (uint32_t)(ins[10]) << 8 | (uint32_t)(ins[11]);
|
||||
STEP_TO_VSETRATE(instru.step);
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = 1;//ins[16.17];
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
instru.gain_switch_on = 0b11110000;
|
||||
} else if (ins[3] == PARA_2) {
|
||||
instru.eliteFxn = CURVE_LSV;
|
||||
instru.notifyRate = (uint32_t)(ins[6]) << 8 | (uint32_t)(ins[7]);
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.hign_z_en = ~(ins[5] & 0x0F);
|
||||
|
||||
} else {
|
||||
// fast notify rate, >= 10sps, auto gain changer only use ADC gain level = 1.2.3
|
||||
instru.gain_switch_on = 0b01110000;
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
|
||||
if (instru.notifyRate > 1000) {
|
||||
// slow notify rate, < 10sps, auto gain changer only use ADC gain level = 1.2.3.4
|
||||
instru.gain_switch_on = 0b11110000;
|
||||
|
||||
} else {
|
||||
// fast notify rate, >= 10sps, auto gain changer only use ADC gain level = 1.2.3
|
||||
instru.gain_switch_on = 0b01110000;
|
||||
}
|
||||
|
||||
ModeLED(WORKING);
|
||||
}
|
||||
|
||||
ModeLED(WORKING);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -981,9 +1005,10 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
instru.eliteFxn = CURVE_CA;
|
||||
instru.sampleRate = 15;
|
||||
instru.Vinit = ((int32_t)(ins[3]) << 8) | (int32_t)(ins[4]);
|
||||
instru.notifyRate = (uint32_t)(ins[5]) << 8 | (uint32_t)(ins[6]);
|
||||
instru.notifyRate = (uint32_t)(ins[7]) << 8 | (uint32_t)(ins[8]);
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.VsetRate = VsetRateTable[0];
|
||||
instru.hign_z_en = ~(ins[6] & 0x0F);
|
||||
|
||||
instru.VoutGainLevel = VOUT_GAIN_240K;
|
||||
|
||||
@@ -1177,6 +1202,50 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
break;
|
||||
}
|
||||
|
||||
case SET_PARA: {
|
||||
int32_t value;
|
||||
|
||||
if (instru.eliteFxn == CURVE_VO) {
|
||||
switch (ins[3]){
|
||||
case DAC_VOLT:
|
||||
value = (ins[4] << 8) | ins[5]; // usercode
|
||||
value = (value - 25000) * 4 * 10000; //[5nV]
|
||||
set_para(instru.eliteFxn, DAC_VOLT, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (instru.eliteFxn == CURVE_IT) {
|
||||
switch (ins[3]){
|
||||
case DAC_VOLT:
|
||||
value = (ins[4] << 8) | ins[5]; // usercode
|
||||
value = (value - 25000) * 4 * 10000; //[5nV]
|
||||
set_para(instru.eliteFxn, DAC_VOLT, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (instru.eliteFxn == CURVE_RT) {
|
||||
switch (ins[3]){
|
||||
case DAC_VOLT:
|
||||
value = (ins[4] << 8) | ins[5]; // usercode
|
||||
value = (value - 25000) * 4 * 10000; //[5nV]
|
||||
set_para(instru.eliteFxn, DAC_VOLT, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xFF: { // 0x3000FF
|
||||
switch (ins[3]) {
|
||||
case 0x01: {
|
||||
|
||||
Reference in New Issue
Block a user