Merge remote-tracking branch 'origin/elite/eis1.1' into eis_10test
This commit is contained in:
+1
-1
@@ -337,7 +337,7 @@ static int32_t read_LPTIA_Iin(){
|
||||
Iin = Cali_LPTIA(ADCraw, instru.gain_lv_lptia);
|
||||
|
||||
InputNotify(NOTIFY_CURRENT, Iin);
|
||||
InputNotify(NOTIFY_IMPEDANCE, instru.gain_lv_lptia);
|
||||
// InputNotify(NOTIFY_IMPEDANCE, instru.gain_lv_lptia);
|
||||
return Iin;
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -70,6 +70,7 @@ static void WorkModeLED()
|
||||
case CURVE_EIS_CV:
|
||||
case CURVE_CA:
|
||||
case CURVE_VT:
|
||||
case CURVE_RT:
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_CYAN);
|
||||
break;
|
||||
|
||||
|
||||
+5
-1
@@ -330,7 +330,7 @@ static int __rt_create(void)
|
||||
m->_measureBat = 0;
|
||||
m->_VoViSwitch = instru.VoViSwitch;
|
||||
|
||||
p->_Vinit = (instru.Vinit - 25000) * 4 * 10000; //[5nV]
|
||||
p->_Vinit = (instru.Vinit - 25000) * 4 * 4000; //[5nV]
|
||||
p->_Vset = 0;
|
||||
|
||||
*wm = p;
|
||||
@@ -576,6 +576,10 @@ int wm_init(void)
|
||||
if (__vt_create()) return -2;
|
||||
break;
|
||||
|
||||
case CURVE_RT:
|
||||
if (__rt_create()) return -2;
|
||||
break;
|
||||
|
||||
default:
|
||||
// printf("DO NOT support!!");
|
||||
return -3;
|
||||
|
||||
+1
@@ -20,6 +20,7 @@ enum all_mode_e {
|
||||
CURVE_EIS = 0xD1, //Should Change to 0xD1
|
||||
CURVE_EIS_CV = 0xD2,
|
||||
CURVE_CA = 0xD3,
|
||||
CURVE_RT = 0x04,
|
||||
CURVE_VT = 0x05,
|
||||
// CURVE_CALI_ADC = 0xF1,
|
||||
SET_SAMPLE_RATE = 0xE0,
|
||||
|
||||
+26
-22
@@ -27,6 +27,14 @@ static void vscan_volt_out(void)
|
||||
|
||||
void *wm = wm_get();
|
||||
|
||||
/* in [5nV] ver */
|
||||
MEAS_VOUT(wm) = DAC_outputV(Vset);
|
||||
InputNotify(NOTIFY_VOLT, Vset/200);
|
||||
} else if (instru.eliteFxn == CURVE_RT) {
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
|
||||
void *wm = wm_get();
|
||||
|
||||
/* in [5nV] ver */
|
||||
MEAS_VOUT(wm) = DAC_outputV(Vset);
|
||||
InputNotify(NOTIFY_VOLT, Vset/200);
|
||||
@@ -36,28 +44,6 @@ static void vscan_volt_out(void)
|
||||
return;
|
||||
}
|
||||
|
||||
static void CalcuResistance()
|
||||
{
|
||||
/* Elite 100 = 100R
|
||||
Elite 1000 = 1KR
|
||||
Elite 10000 = 10KR
|
||||
Elite 100000 = 100KR
|
||||
Elite 1000000 = 1MR
|
||||
*/
|
||||
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
struct wm_meas_t *m = &rt->measure;
|
||||
int64_t resist;
|
||||
int64_t volt = (int64_t)(m->_measureVout) ;
|
||||
int64_t current = (int64_t)(m->_measureCurrent);
|
||||
|
||||
resist = volt * 1000000 / current; //R = V / Iin; [mOhm]
|
||||
InputNotify(NOTIFY_IMPEDANCE, resist);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//////EIS PLOT RELATED FUNCTION START//////
|
||||
static uint8_t CalcDecade(uint32_t f1, uint32_t f2)
|
||||
{
|
||||
@@ -216,6 +202,24 @@ static void VT_Plot(void)
|
||||
return;
|
||||
}
|
||||
|
||||
static void RT_Plot(void)
|
||||
{
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
static uint8_t ADC_cnt = 0;
|
||||
void *wm = wm_get();
|
||||
|
||||
if (ADC_cnt == 0) {
|
||||
LPTIA_change_gain();
|
||||
ADC_cnt++;
|
||||
|
||||
} else if (ADC_cnt == 1) {
|
||||
read_LPTIA_Iin();
|
||||
ADC_cnt = 0;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void EIS_Plot(void) //real and imag impedance plot
|
||||
{
|
||||
struct wm_eis_ctx_t *eis = (struct wm_eis_ctx_t *)wm_get();
|
||||
|
||||
+3
-3
@@ -4,9 +4,9 @@
|
||||
|
||||
#define VERSION_DATE_YEAR 22
|
||||
#define VERSION_DATE_MONTH 10
|
||||
#define VERSION_DATE_DAY 7
|
||||
#define VERSION_DATE_HOUR 10
|
||||
#define VERSION_DATE_MINUTE 49
|
||||
#define VERSION_DATE_DAY 27
|
||||
#define VERSION_DATE_HOUR 17
|
||||
#define VERSION_DATE_MINUTE 8
|
||||
|
||||
// this is NOT the version hash !!
|
||||
// it's the last version hash
|
||||
|
||||
+72
-1155
File diff suppressed because it is too large
Load Diff
+177
-116
@@ -119,6 +119,7 @@ static void EliteADCControl(void);
|
||||
|
||||
static void cv_vscan(void);
|
||||
static void ca_vscan(void);
|
||||
static void rt_vscan(void);
|
||||
static void mode_done(void);
|
||||
|
||||
//mode (DAC)
|
||||
@@ -172,114 +173,158 @@ static void step2VsetRate(uint32_t step){
|
||||
}
|
||||
}
|
||||
|
||||
// update instruction for Z meter
|
||||
static void update_ZM_instruction(uint8 *ins) {
|
||||
uint8_t ins_type = ins[0] & 0b11110000;
|
||||
uint8_t chip_ID = ins[0] & 0b00001111;
|
||||
uint8_t oper = ins[1] & 0xF0; // this is don't care in RISASD;//
|
||||
instru.chip_id = chip_ID;
|
||||
|
||||
switch (ins_type) {
|
||||
|
||||
case INS_TYPE_RIS: {
|
||||
switch (ins[2]) {
|
||||
case CURVE_EIS: { //0xD1
|
||||
if (ins[3] == PARA_1) { //3000D1 01
|
||||
instru.f1 = (uint32_t)ins[4] << 24 | (uint32_t)ins[5] << 16 | (uint32_t)ins[6] << 8 | (uint32_t)ins[7]; //FREQ_START
|
||||
instru.f2 = (uint32_t)ins[8] << 24 | (uint32_t)ins[9] << 16 | (uint32_t)ins[10] << 8 | (uint32_t)ins[11]; //FREQ_STOP
|
||||
//instru.sampleRate = 15;//CalcDelayTime(User2Freq(instru.f1), true); //ms //read
|
||||
instru.fmax = (uint32_t)VMAX(instru.f1, instru.f2);
|
||||
instru.fmin = (uint32_t)VMIN(instru.f1, instru.f2);
|
||||
instru.delay = (uint16_t)ins[12] << 8 | (uint16_t)ins[13]; //DELAY/10 how many periods
|
||||
if (instru.f1 > instru.f2){
|
||||
instru.directionInit = 0; //0:reverse 1:forward
|
||||
} else if (instru.f1 <= instru.f2){
|
||||
instru.directionInit = 1;
|
||||
}
|
||||
} else if (ins[3] == PARA_2) { //3000D1 02
|
||||
instru.eliteFxn = CURVE_EIS;
|
||||
instru.dcbias = (uint16_t)ins[4] << 8 | (uint16_t)ins[5];
|
||||
instru.acamp = (uint16_t)ins[6] << 8 | (uint16_t)ins[7];
|
||||
instru.avgnum = (uint8_t)ins[8];
|
||||
instru.rtia = (uint8_t)ins[9];
|
||||
instru.ppd = (uint16_t)ins[10] << 8 | (uint16_t)ins[11];
|
||||
instru.scale = (uint8_t)ins[12];
|
||||
|
||||
instru.gain_lv_hstia = instru.rtia;
|
||||
|
||||
setEIS_EIS();
|
||||
|
||||
ModeLED(WORKING);
|
||||
}
|
||||
break;
|
||||
static void decode_eis_mode(uint8 *ins)
|
||||
{
|
||||
if (ins[3] == PARA_1) { //3000D1 01
|
||||
instru.f1 = (uint32_t)ins[4] << 24 | (uint32_t)ins[5] << 16 | (uint32_t)ins[6] << 8 | (uint32_t)ins[7]; //FREQ_START
|
||||
instru.f2 = (uint32_t)ins[8] << 24 | (uint32_t)ins[9] << 16 | (uint32_t)ins[10] << 8 | (uint32_t)ins[11]; //FREQ_STOP
|
||||
//instru.sampleRate = 15;//CalcDelayTime(User2Freq(instru.f1), true); //ms //read
|
||||
instru.fmax = (uint32_t)VMAX(instru.f1, instru.f2);
|
||||
instru.fmin = (uint32_t)VMIN(instru.f1, instru.f2);
|
||||
instru.delay = (uint16_t)ins[12] << 8 | (uint16_t)ins[13]; //DELAY/10 how many periods
|
||||
if (instru.f1 > instru.f2){
|
||||
instru.directionInit = 0; //0:reverse 1:forward
|
||||
} else if (instru.f1 <= instru.f2){
|
||||
instru.directionInit = 1;
|
||||
}
|
||||
} else if (ins[3] == PARA_2) { //3000D1 02
|
||||
instru.eliteFxn = CURVE_EIS;
|
||||
instru.dcbias = (uint16_t)ins[4] << 8 | (uint16_t)ins[5];
|
||||
instru.acamp = (uint16_t)ins[6] << 8 | (uint16_t)ins[7];
|
||||
instru.avgnum = (uint8_t)ins[8];
|
||||
instru.rtia = (uint8_t)ins[9];
|
||||
instru.ppd = (uint16_t)ins[10] << 8 | (uint16_t)ins[11];
|
||||
instru.scale = (uint8_t)ins[12];
|
||||
|
||||
case CURVE_EIS_CV: {
|
||||
if (ins[3] == PARA_1) {
|
||||
instru.Vinit = (int32_t)ins[4] << 8 | (int32_t)ins[5];
|
||||
instru.Ve1 = (uint16_t)ins[6] << 8 | (uint16_t)ins[7];
|
||||
instru.Ve2 = (uint16_t)ins[8] << 8 | (uint16_t)ins[9];
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
if (instru.Vinit > instru.Ve1 || instru.Vinit == instru.Vmax){
|
||||
instru.directionInit = 0;//0:reverse 1:forward
|
||||
} else if (instru.Vinit <= instru.Ve1 || instru.Vinit == instru.Vmin){
|
||||
instru.directionInit = 1;
|
||||
}
|
||||
} else if (ins[3] == PARA_2) {
|
||||
instru.eliteFxn = CURVE_EIS_CV;
|
||||
instru.notifyRate = (uint32_t)ins[8] << 8 | (uint32_t)ins[9];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
//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); //step2VsetRate
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = (uint16_t)ins[10] << 8 | (uint16_t)ins[11];
|
||||
instru.gain_lv_hstia = instru.rtia;
|
||||
|
||||
setEIS_CV();
|
||||
ModeLED(WORKING);
|
||||
}
|
||||
setEIS_EIS();
|
||||
|
||||
break;
|
||||
ModeLED(WORKING);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void decode_cv_mode(uint8 *ins)
|
||||
{
|
||||
if (ins[3] == PARA_1) {
|
||||
instru.Vinit = (int32_t)ins[4] << 8 | (int32_t)ins[5];
|
||||
instru.Ve1 = (uint16_t)ins[6] << 8 | (uint16_t)ins[7];
|
||||
instru.Ve2 = (uint16_t)ins[8] << 8 | (uint16_t)ins[9];
|
||||
instru.Vmax = (int32_t)VMAX(instru.Ve1,instru.Ve2);
|
||||
instru.Vmin = (int32_t)VMIN(instru.Ve1,instru.Ve2);
|
||||
if (instru.Vinit > instru.Ve1 || instru.Vinit == instru.Vmax){
|
||||
instru.directionInit = 0;//0:reverse 1:forward
|
||||
} else if (instru.Vinit <= instru.Ve1 || instru.Vinit == instru.Vmin){
|
||||
instru.directionInit = 1;
|
||||
}
|
||||
} else if (ins[3] == PARA_2) {
|
||||
instru.eliteFxn = CURVE_EIS_CV;
|
||||
instru.notifyRate = (uint32_t)ins[8] << 8 | (uint32_t)ins[9];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
//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); //step2VsetRate
|
||||
instru.VsetRate = VsetRateTable[instru.VsetRateIndex];//N
|
||||
instru.cycleNumber = (uint16_t)ins[10] << 8 | (uint16_t)ins[11];
|
||||
|
||||
case CURVE_CA: { //3707D3 927C432103E8 //"4XD3927C43;3X2103E8" 3407D3 927C 4321 03E8
|
||||
instru.eliteFxn = CURVE_CA;
|
||||
instru.Vinit = (int32_t)ins[3] << 8 | (int32_t)ins[4]; //37500
|
||||
instru.notifyRate = (uint32_t)ins[7] << 8 | (uint32_t)ins[8]; //1000
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10; //100
|
||||
instru.VsetRate = VsetRateTable[0]; //2
|
||||
//instru.hign_z_en = ins[6] & 0x0F;
|
||||
setEIS_CV();
|
||||
ModeLED(WORKING);
|
||||
}
|
||||
|
||||
//instru.VoutGainLv = VOUT_GAIN_240K;
|
||||
return;
|
||||
}
|
||||
|
||||
setEIS_CV();
|
||||
ModeLED(WORKING);
|
||||
static void decode_ca_mode(uint8 *ins)
|
||||
{
|
||||
instru.eliteFxn = CURVE_CA;
|
||||
instru.Vinit = (int32_t)ins[3] << 8 | (int32_t)ins[4]; //37500
|
||||
instru.notifyRate = (uint32_t)ins[7] << 8 | (uint32_t)ins[8]; //1000
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10; //100
|
||||
instru.VsetRate = VsetRateTable[0]; //2
|
||||
//instru.hign_z_en = ins[6] & 0x0F;
|
||||
|
||||
//instru.VoutGainLv = VOUT_GAIN_240K;
|
||||
|
||||
setEIS_CV();
|
||||
ModeLED(WORKING);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void decode_vt_mode(uint8 *ins)
|
||||
{
|
||||
instru.eliteFxn = CURVE_VT;
|
||||
instru.notifyRate = (uint32_t)ins[5] << 8 | (uint32_t)ins[6];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.measure_vin_range = ins[7];
|
||||
setEIS_CV();
|
||||
AD5940_SPIWriteReg(ADCCON, 0x0001080E); //PGA = 1.5 //VT
|
||||
uint8_t z;
|
||||
uint16_t b;
|
||||
if (instru.measure_vin_range == 0) { //measure +volt
|
||||
z = 0;
|
||||
b = 0;
|
||||
} else if (instru.measure_vin_range == 1) { //measure +-1V
|
||||
z = 32;
|
||||
b = 2048;
|
||||
} else if (instru.measure_vin_range == 2) { //measure -volt
|
||||
z = 62;
|
||||
b = 3910;
|
||||
}
|
||||
set_lpdac_ce_1100mv(z, b);
|
||||
disconnect_rtia();
|
||||
ModeLED(WORKING);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void decode_rt_mode(uint8 *ins)
|
||||
{
|
||||
instru.eliteFxn = CURVE_RT;
|
||||
instru.notifyRate = (uint32_t)ins[7] << 8 | (uint32_t)ins[8];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
// instru.notifyRate = 100;
|
||||
// instru.measure_vin_range = ins[7];
|
||||
// instru.measure_vin_range = 0;
|
||||
setEIS_CV();
|
||||
instru.Vinit = (uint32_t)ins[3] << 8 | (uint32_t)ins[4];
|
||||
|
||||
ModeLED(WORKING);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void decode_ris_ins(uint8 *ins)
|
||||
{
|
||||
switch (ins[2]) {
|
||||
case CURVE_EIS:
|
||||
decode_eis_mode(ins);
|
||||
break;
|
||||
}
|
||||
|
||||
case CURVE_VT: { //350605430103E800
|
||||
instru.eliteFxn = CURVE_VT;
|
||||
instru.notifyRate = (uint32_t)ins[5] << 8 | (uint32_t)ins[6];
|
||||
instru.notifyRate = 10000 / instru.notifyRate * 10;
|
||||
instru.measure_vin_range = ins[7];
|
||||
setEIS_CV();
|
||||
AD5940_SPIWriteReg(ADCCON, 0x0001080E); //PGA = 1.5 //VT
|
||||
uint8_t z;
|
||||
uint16_t b;
|
||||
if (instru.measure_vin_range == 0) { //measure +volt
|
||||
z = 0;
|
||||
b = 0;
|
||||
} else if (instru.measure_vin_range == 1) { //measure +-1V
|
||||
z = 32;
|
||||
b = 2048;
|
||||
} else if (instru.measure_vin_range == 2) { //measure -volt
|
||||
z = 62;
|
||||
b = 3910;
|
||||
}
|
||||
set_lpdac_ce_1100mv(z, b);
|
||||
disconnect_rtia();
|
||||
ModeLED(WORKING);
|
||||
case CURVE_EIS_CV:
|
||||
decode_cv_mode(ins);
|
||||
break;
|
||||
|
||||
case CURVE_CA:
|
||||
decode_ca_mode(ins);
|
||||
break;
|
||||
|
||||
case CURVE_VT:
|
||||
decode_vt_mode(ins);
|
||||
break;
|
||||
|
||||
case CURVE_RT:
|
||||
decode_rt_mode(ins);
|
||||
break;
|
||||
|
||||
case 0xE2:{ //SET_PARA: { 0xE2
|
||||
int32_t volt;
|
||||
|
||||
volt = (int32_t)ins[4] << 8 | (int32_t)ins[5];
|
||||
|
||||
set_rt_volt(volt);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -419,9 +464,9 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
|
||||
case 0x03: { // ble write: 0x3000FF 03
|
||||
if (ins[4] == 1) {
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_RED); //0301
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_RED);
|
||||
} else if (ins[4] == 2){
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_ORANGE); //0302
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_ORANGE);
|
||||
} else if (ins[4] == 3){
|
||||
led_color_set(LED_NB_MAX, LED_BR_LV1, LED_CLR_YELLOW);
|
||||
} else if (ins[4] == 4){
|
||||
@@ -521,15 +566,14 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
/** **/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case INS_TYPE_VIS: {
|
||||
static void decode_vis_ins(uint8 *ins)
|
||||
{
|
||||
uint8_t oper = ins[1] & 0xF0; // this is don't care in RISASD;//
|
||||
switch (oper) {
|
||||
// reset all variables ( Ins = 0xC0F0)
|
||||
case VIS_RST: {
|
||||
@@ -584,10 +628,14 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case INS_TYPE_CIS: {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void decode_cis_ins(uint8 *ins)
|
||||
{
|
||||
uint8_t oper = ins[1] & 0xF0;
|
||||
switch (oper) {
|
||||
case CIS_VERSION: {
|
||||
initCISBuf();
|
||||
@@ -643,15 +691,28 @@ static void update_ZM_instruction(uint8 *ins) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
// unknown instruction
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// update instruction for Z meter
|
||||
static void update_ZM_instruction(uint8 *ins) {
|
||||
uint8_t ins_type = ins[0] & 0b11110000;
|
||||
instru.chip_id = ins[0] & 0b00001111;
|
||||
|
||||
switch (ins_type) {
|
||||
case INS_TYPE_RIS:
|
||||
decode_ris_ins(ins);
|
||||
break;
|
||||
|
||||
case INS_TYPE_VIS:
|
||||
decode_vis_ins(ins);
|
||||
break;
|
||||
|
||||
case INS_TYPE_CIS:
|
||||
decode_cis_ins(ins);
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void ZM_instruction_update_handle(uint8_t characteristic) {
|
||||
|
||||
+29
-2
@@ -32,7 +32,8 @@ static void vscan_ctrl(void);
|
||||
instru.eliteFxn == CURVE_EIS || \
|
||||
instru.eliteFxn == CURVE_EIS_CV || \
|
||||
instru.eliteFxn == CURVE_CA || \
|
||||
instru.eliteFxn == CURVE_VT \
|
||||
instru.eliteFxn == CURVE_VT || \
|
||||
instru.eliteFxn == CURVE_RT \
|
||||
)
|
||||
|
||||
#define Ve1MatchVe2Mode() ( \
|
||||
@@ -234,7 +235,9 @@ static void EliteADCControl(void) //CURVE_IV => CC_Plot() | CURVE_CV => Iin_Vin_
|
||||
VT_Plot();
|
||||
break;
|
||||
|
||||
|
||||
case CURVE_RT:
|
||||
RT_Plot();
|
||||
break;
|
||||
// case CURVE_CALI_ADC:
|
||||
// if (instru.AdcChannel == IIN_ADC) {
|
||||
// cali_IT_plot();
|
||||
@@ -269,6 +272,25 @@ static void mode_done(void) //finishMode = 1, SendNotify(), reset()
|
||||
}
|
||||
}
|
||||
|
||||
static void CalcuResistance()
|
||||
{
|
||||
/* Elite 100000 = 100R
|
||||
Elite 1000000 = 1KR
|
||||
Elite 10000000 = 10KR
|
||||
Elite 100000000 = 100KR
|
||||
Elite 1000000000 = 1MR
|
||||
*/
|
||||
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
struct wm_meas_t *m = &rt->measure;
|
||||
int64_t resist;
|
||||
int64_t volt = Vset / 200; // [uV]
|
||||
int64_t current = (int64_t)(m->_measureCurrent);
|
||||
|
||||
resist = volt * 1000000 / current; //R = V / Iin; [mOhm]
|
||||
InputNotify(NOTIFY_IMPEDANCE, resist);
|
||||
}
|
||||
|
||||
static void vscan_ctrl(void)
|
||||
{
|
||||
switch (instru.eliteFxn) {
|
||||
@@ -284,6 +306,11 @@ static void vscan_ctrl(void)
|
||||
ca_vscan();
|
||||
break;
|
||||
|
||||
case CURVE_RT:
|
||||
CalcuResistance();
|
||||
rt_vscan();
|
||||
break;
|
||||
|
||||
default:{
|
||||
break;
|
||||
}
|
||||
|
||||
+28
@@ -17,4 +17,32 @@ static void ca_vscan(void)
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void rt_vscan(void)
|
||||
{
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
|
||||
if(vscanReset){
|
||||
Vset = rt->_Vinit;
|
||||
}
|
||||
|
||||
if(!vscanReset){
|
||||
Vset = rt->_Vinit;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void set_rt_volt(int32_t volt)
|
||||
{
|
||||
struct wm_rt_ctx_t *rt = (struct wm_rt_ctx_t *)wm_get();
|
||||
|
||||
volt = (volt - 25000) * 4 * 4000;
|
||||
|
||||
rt->_Vinit = volt;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user