fix change level

This commit is contained in:
YiChin
2020-07-28 10:09:33 +08:00
parent b734f2d44c
commit fab091d3ec
3 changed files with 83 additions and 96 deletions
@@ -4,6 +4,7 @@
#define Vset INSTRUCTION.Vset
static void readIin(WorkMode *WorkModeData);
static int32_t readVinVout(WorkMode *WorkModeData);
static uint16_t OneWayVoltScan() {
static uint16_t DACOutCode;
@@ -151,58 +152,19 @@ 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{
ADCGainControl(INSTRUCTION.ADCGainLevel);
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->_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;
}
}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]
@@ -210,27 +172,25 @@ static void CC_Plot(WorkMode *WorkModeData){
}else{
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**/
readIin(WorkModeData);
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
@@ -242,15 +202,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]
@@ -258,7 +210,6 @@ static void CC_Plot(WorkMode *WorkModeData){
}else{
InputNotify(NOTIFY_VOLT, VoltData);
}
DACenable(WorkModeData, VoltData, AFTER_READ_V);
ReadCurrent(spi_ADC_rxbuf);
@@ -269,7 +220,6 @@ static void CC_Plot(WorkMode *WorkModeData){
ADCSwitch = 0;
}
}
#undef CURRENT_MODE
}
@@ -323,13 +273,7 @@ static void ZT_Plot(WorkMode *WorkModeData) {
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);
}
readIin(WorkModeData);
InputNotify(NOTIFY_CURRENT, CURRENT_MODE->_measureCurrent);
DACenable(WorkModeData, VoltData, AFTER_READ_I);
@@ -433,7 +377,7 @@ static void ZT_Plot(WorkMode *WorkModeData) {
}
#undef CURRENT_MODE
}
}//mayby take away
static void IT_Plot(WorkMode *WorkModeData) {
switch (INSTRUCTION.eliteFxn) {
@@ -488,13 +432,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++;
}
@@ -568,14 +506,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++;
}
@@ -633,6 +564,7 @@ static void readIin(WorkMode *WorkModeData){
break;
}
}
if(INSTRUCTION.AutoGainEnable){
TEMP_MODE->_measureCurrent = AutoGainReadCurrent(spi_ADC_rxbuf);
AutoGainChange(TEMP_MODE->_measureCurrent);
@@ -644,5 +576,60 @@ static void readIin(WorkMode *WorkModeData){
#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
@@ -4,9 +4,9 @@
#define VERSION_DATE_YEAR 20
#define VERSION_DATE_MONTH 7
#define VERSION_DATE_DAY 27
#define VERSION_DATE_HOUR 18
#define VERSION_DATE_MINUTE 27
#define VERSION_DATE_DAY 28
#define VERSION_DATE_HOUR 10
#define VERSION_DATE_MINUTE 9
// 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:{