/* * ADC_DispPressSens.c * * Created on: Jun 7, 2020 * Author: avi */ #include "include.h" #include #include "ADC.h" #include float DispenserPressure[MAX_SYSTEM_DISPENSERS] = {0}; float Vlow,VHigh,Bits_Min,Bits_Max,a[MAX_SYSTEM_DISPENSERS]= {0}, b[MAX_SYSTEM_DISPENSERS]= {0}; void Calculateinit (void) { int DispenserId = 0; float Min = 0.0;//default for old pressure sensor float Max = 1.0;//default for pressure sensor Vlow = 0.004 * 130.0; // 4mA*130ohm = 0.52 V(Min Pascal) VHigh = 0.020 *130.0; // 20mA*130ohm = 2.6V (Max Pascal) Bits_Min = Vlow * 4096.0 / 3.0; // Vlow * 4096bit / 3Vref = 709.973328 bits Bits_Max = VHigh * 4096.0 / 3.0; // VHigh * 4096bit / 3Vref = 3549.86646 bits for(DispenserId = 0;DispenserId < MAX_SYSTEM_DISPENSERS; DispenserId++) { Min = 0.0;//default for old pressure sensor Max = 1.0;//default for pressure sensor if(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Header == Disp_EEPROM_Header) { Min = (float)(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Minimal_Pressure) / 10000.0; if(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Maximal_Pressure == 0x1027)// { //Bug in dispenser test V1.9 - send this field as big endian, (0x2710 is 10000, so we will use the default value 0x2710 = 100000, 10000/10000 = 1) Max = 1.0;//default } else { Max = (float)(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Maximal_Pressure) / 10000.0; } } else if(Dispenser_struct[DispenserId].I2C_Status = I2C_COMM_FAILED)//#warning need to implement !!!! { #warning need to implement i2c status !!!! Min = - 0.1;//-1000 / 10000.0;//default for NEW pressure sensor Max = 1;//10000 / 10000.0;//default for NEW pressure sensor Report("unable to read the dispenser EEPROM, use default NEW pressure values",__FILE__,__LINE__,DispenserId,RpWarning,(int)Dispenser_struct[DispenserId].Type,0); } else { Report("Dispenser's EEPROM - Wrong header! use default OLD pressure values",__FILE__,__LINE__,DispenserId,RpWarning,(int)Dispenser_struct[DispenserId ].Read_Disp_EEPROM.bytes.Header,0); } a[DispenserId] = (Max - Min) / (Bits_Max - Bits_Min);// Mpascal/Bits = 0.000352125 with default values b[DispenserId] = Max - (a[DispenserId] * Bits_Max ); // y = ax + b (x= Bits_Min, y = 0) } } float CalculateDispenserPressure (int DispenserId) { unsigned short data = 0; float temp = 0.0; /* data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); temp = 4096 - data; temp *= 3; temp *= 1000; //move to mv temp /= 4096; DispenserPressure[DispenserId] = 3000 - temp; */ data = ADC_GetReading(DispenserIdToPressureSensorId[DispenserId]); if(data Bar //if(DispenserPressure[DispenserId] < 0 ) //why???? // DispenserPressure[DispenserId] = 0; return(DispenserPressure[DispenserId]); }