read current

This commit is contained in:
alan
2019-06-27 10:46:23 +08:00
parent 149e092181
commit d11b9cdbe2
2 changed files with 124 additions and 93 deletions
@@ -929,7 +929,6 @@ static void update_ZM_instruction(uint8 *ins) {
PeriodicEvent = true;
StepTime = 0x14;
// SimpleProfile_S
// IT_Plot(); // enable 10v = 1
break;
}
@@ -954,6 +953,104 @@ static void update_ZM_instruction(uint8 *ins) {
case ADCTEST:{
INSTRUCTION.eliteFxn = ADCTEST;
PeriodicEvent = true;
// uint8_t ADCin = 0;
// int32_t AIN = 0;
// switch(ins[3]){
// // AINp is AIN0; AINn is GND
//
// // V1 = AIN0 voltage
// // V1 / 10^6 = Iin (mA)
// case 0 :{
// ADCin = 0xC1;
// ADC_write(ADCin);
// CPUdelay(16000);
// ADC_read(spi_ADC_rxbuf);
//
// float Vo;
// int16_t decode = (int16_t)(spi_ADC_rxbuf[0] << 8) | (uint16_t)(spi_ADC_rxbuf[1]);
// Vo = decode * (-176.91125719) + 1400190.030591624;
// AIN = (int32_t) (Vo / 1);
//
// NotifyCurrent[0] = (uint8_t) (AIN >> 24) & (0xFF);
// NotifyCurrent[1] = (uint8_t) (AIN >> 16) & (0xFF);
// NotifyCurrent[2] = (uint8_t) (AIN >> 8) & (0xFF);
// NotifyCurrent[3] = (uint8_t) (AIN) & (0xFF);
//
// SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
// SendNotify();
//
// // (GNDS - Vin)100 = Vo - GNDS
// // Vo = 101 GNDS - 100 Vin
// // Vo =
//
// break;
// }
//
// // AINp is AIN1; AINn is GND
// // AIN1 = 25 * AIN0
// // Iin = AIN1 / (25*10^6)
// case 1 :{
// ADCin = 0xD1;
// ADC_write(ADCin);
// CPUdelay(16000);
// ADC_read(spi_ADC_rxbuf);
//
// float Vo;
// int16_t decode = (int16_t)(spi_ADC_rxbuf[0] << 8) | (uint16_t)(spi_ADC_rxbuf[1]);
// Vo = decode * (-5855081.65485084) + 47350.844772584;
// AIN = (int32_t) (Vo / 1);
//
// NotifyCurrent[0] = (uint8_t) (AIN >> 24) & (0xFF);
// NotifyCurrent[1] = (uint8_t) (AIN >> 16) & (0xFF);
// NotifyCurrent[2] = (uint8_t) (AIN >> 8) & (0xFF);
// NotifyCurrent[3] = (uint8_t) (AIN) & (0xFF);
//
// SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
// SendNotify();
//
// break;
// }
//
// // AINp is AIN2; AINn is GND
// // AIN2 = 25 * AIN1 = 625 * AIN0
// // Iin = AIN1 / (625*10^6)
// case 2 :{
// ADCin = 0xE1;
// ADC_write(ADCin);
// CPUdelay(16000);
// ADC_read(spi_ADC_rxbuf);
//
// SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
// break;
// }
//
// // AINp is AIN3; AINn is GND
// // AIN3 = (-0.1) * Vin (V)
// // Vo = GNDS - Vin/10 (to GNDA)
// case 3 :{
// ADCin = 0xF1;
// ADC_write(ADCin);
// CPUdelay(16000);
// ADC_read(spi_ADC_rxbuf);
// AIN = DecodeADCVolt(ADCin);
//
// // return voltage (mV)
// NotifyVolt[0] = (uint8_t) (AIN >> 24) & (0xFF);
// NotifyVolt[1] = (uint8_t) (AIN >> 16) & (0xFF);
// NotifyVolt[2] = (uint8_t) (AIN >> 8) & (0xFF);
// NotifyVolt[3] = (uint8_t) (AIN) & (0xFF);
//
// CPUdelay(16000);
// SimpleProfile_SetParameter(BLE_DAT_BUFF_CHAR, BLE_DAT_BUFF_SIZE, not_buf);
//
// break;
// }
//
//
// default :{
// break;
// }
// }
// CPUdelay(16000);
// SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
@@ -225,8 +225,12 @@ static uint8_t DecodeADCCurrent_level1(){
}
// if (ADC_stage1full()){
if ((AIN1[0] >= 0xFE) || (AIN1[0] <= 02)){
// blue
LED_color(0xE4, 0x00, 0x00, 0x0E);
return 0;
} else {
// purple
LED_color(0xE4, 0x0E, 0x00, 0x0E);
return 1;
}
}
@@ -242,6 +246,8 @@ static uint8_t DecodeADCCurrent_level2(){
if ((AIN2[0] >= 0x3B) || (AIN2[0] <= 01)){
return DecodeADCCurrent_level1();
} else {
// orange?
LED_color(0xE4, 0x0E, 0x0E, 0x00);
for(int i=0 ; i<SPI_ADC_SIZE ; i++){
spi_ADC_rxbuf[i] = AIN2[i];
}
@@ -259,6 +265,8 @@ static uint8_t DecodeADCCurrent_level3(){
if ((AIN3[0] >= 0x3B) || (AIN3[0] <= 01)){
return DecodeADCCurrent_level2();
} else {
// white
LED_color(0xE4, 0x0E, 0x0E, 0x0E);
for(int i=0 ; i<SPI_ADC_SIZE ; i++){
spi_ADC_rxbuf[i] = AIN3[i];
}
@@ -437,6 +445,7 @@ static void VT_Plot() {
NotifyVolt[2] = (uint8_t) (AIN >> 8) & (0xFF);
NotifyVolt[3] = (uint8_t) (AIN) & (0xFF);
}
static void IT_Plot() {
int32_t AIN;
AIN = DecodeADCCurrent(0xC1);
@@ -508,102 +517,26 @@ static void DAC_init(){
static void ADC_Test(){
uint8_t ADCin = 0;
int32_t AIN = 0;
switch(ins[3]){
// AINp is AIN0; AINn is GND
// V1 = AIN0 voltage
// V1 / 10^6 = Iin (mA)
case 0 :{
ADCin = 0xC1;
ADC_write(ADCin);
CPUdelay(16000);
ADC_read(spi_ADC_rxbuf);
ADCin = 0xC1;
ADC_write(ADCin);
CPUdelay(160);
ADC_read(spi_ADC_rxbuf);
float Vo;
int16_t decode = (int16_t)(spi_ADC_rxbuf[0] << 8) | (uint16_t)(spi_ADC_rxbuf[1]);
Vo = decode * (-176.91125719) + 1400190.030591624;
AIN = (int32_t) (Vo / 1);
float Vo;
int16_t decode = (int16_t)(spi_ADC_rxbuf[0] << 8) | (uint16_t)(spi_ADC_rxbuf[1]);
Vo = decode * (-176.91125719) + 1400190.030591624;
AIN = (int32_t) (Vo / 1);
NotifyCurrent[0] = (uint8_t) (AIN >> 24) & (0xFF);
NotifyCurrent[1] = (uint8_t) (AIN >> 16) & (0xFF);
NotifyCurrent[2] = (uint8_t) (AIN >> 8) & (0xFF);
NotifyCurrent[3] = (uint8_t) (AIN) & (0xFF);
NotifyCurrent[0] = (uint8_t) (AIN >> 24) & (0xFF);
NotifyCurrent[1] = (uint8_t) (AIN >> 16) & (0xFF);
NotifyCurrent[2] = (uint8_t) (AIN >> 8) & (0xFF);
NotifyCurrent[3] = (uint8_t) (AIN) & (0xFF);
SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
SendNotify();
// (GNDS - Vin)100 = Vo - GNDS
// Vo = 101 GNDS - 100 Vin
// Vo =
break;
}
// AINp is AIN1; AINn is GND
// AIN1 = 25 * AIN0
// Iin = AIN1 / (25*10^6)
case 1 :{
ADCin = 0xD1;
ADC_write(ADCin);
CPUdelay(16000);
ADC_read(spi_ADC_rxbuf);
float Vo;
int16_t decode = (int16_t)(spi_ADC_rxbuf[0] << 8) | (uint16_t)(spi_ADC_rxbuf[1]);
Vo = decode * (-5855081.65485084) + 47350.844772584;
AIN = (int32_t) (Vo / 1);
NotifyCurrent[0] = (uint8_t) (AIN >> 24) & (0xFF);
NotifyCurrent[1] = (uint8_t) (AIN >> 16) & (0xFF);
NotifyCurrent[2] = (uint8_t) (AIN >> 8) & (0xFF);
NotifyCurrent[3] = (uint8_t) (AIN) & (0xFF);
SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
SendNotify();
break;
}
// AINp is AIN2; AINn is GND
// AIN2 = 25 * AIN1 = 625 * AIN0
// Iin = AIN1 / (625*10^6)
case 2 :{
ADCin = 0xE1;
ADC_write(ADCin);
CPUdelay(16000);
ADC_read(spi_ADC_rxbuf);
SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
break;
}
// AINp is AIN3; AINn is GND
// AIN3 = (-0.1) * Vin (V)
// Vo = GNDS - Vin/10 (to GNDA)
case 3 :{
ADCin = 0xF1;
ADC_write(ADCin);
CPUdelay(16000);
ADC_read(spi_ADC_rxbuf);
AIN = DecodeADCVolt(ADCin);
// return voltage (mV)
NotifyVolt[0] = (uint8_t) (AIN >> 24) & (0xFF);
NotifyVolt[1] = (uint8_t) (AIN >> 16) & (0xFF);
NotifyVolt[2] = (uint8_t) (AIN >> 8) & (0xFF);
NotifyVolt[3] = (uint8_t) (AIN) & (0xFF);
CPUdelay(16000);
SimpleProfile_SetParameter(BLE_DAT_BUFF_CHAR, BLE_DAT_BUFF_SIZE, not_buf);
break;
}
default :{
break;
}
}
NotifyImpedance[1] = spi_ADC_rxbuf[0];
NotifyImpedance[2] = spi_ADC_rxbuf[1];
SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 4, spi_ADC_rxbuf);
// SendNotify();
}
@@ -663,6 +596,7 @@ static void SimpleBLEPeripheral_performPeriodicTask() {
}
case ADCTEST: {
ADC_Test();
SendNotify();
break;
}