aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-06-07 16:24:33 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-06-07 16:24:33 +0300
commit2137dbeeb984f4abcb2c7b7af83a396dd5d40879 (patch)
tree849542a2534f698f3d6ca7b3f3c9fbcc596b63be /Software
parent85e2267e399805c9bde146833d338cd9856bbfa0 (diff)
parent600b0b6714d8adce3b5e3fbdd33a1bc568c95f08 (diff)
downloadTango-2137dbeeb984f4abcb2c7b7af83a396dd5d40879.tar.gz
Tango-2137dbeeb984f4abcb2c7b7af83a396dd5d40879.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software')
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c84
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h8
-rw-r--r--Software/Embedded_SW/Embedded/Main.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c52
-rw-r--r--Software/PMR/Messages/Stubs/StubDispenserEEpromData.proto30
-rw-r--r--Software/PMR/Messages/Stubs/StubMainCardEEpromWriteResponse.proto7
11 files changed, 117 insertions, 79 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index c5371b413..a50889e47 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -493,6 +493,7 @@ typedef struct
*/
+#define MAX_SYSTEM_DISPENSERS 8
typedef struct
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h
index 03d333e04..d7efd45d4 100644
--- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h
+++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h
@@ -74,4 +74,7 @@ double ReadVAC();
extern PowerControlFlag Power_Control_Flag;
+float CalculateDispenserPressure (int DispenserId);
+void Calculateinit (void);
+
#endif /* DRIVERS_ADC_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c
new file mode 100644
index 000000000..a0c59aace
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_DispPressSens.c
@@ -0,0 +1,84 @@
+/*
+ * ADC_DispPressSens.c
+ *
+ * Created on: Jun 7, 2020
+ * Author: avi
+ */
+
+#include "include.h"
+#include <DataDef.h>
+#include "ADC.h"
+
+#include <Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h>
+
+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 old 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++)
+ {
+ 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;
+ Max = (float)(Dispenser_struct[DispenserId].Read_Disp_EEPROM.bytes.Maximal_Pressure) / 10000.0;
+ }
+ else
+ {
+ Report("Dispenser's EEPROM - Wrong header! use default 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<Bits_Min)
+ data = Bits_Min;//40mA 0Bar
+
+ temp = a[DispenserId] * data + b[DispenserId];
+
+ DispenserPressure[DispenserId] = temp; // [Mpascal] ( 1 Mpascal = 10 Bar )
+
+ //unmark one of them to convert from Mpascal to :
+ //-----------------------------------
+ //DispenserPressure[DispenserId] /= 1000000; //Pascal
+ //DispenserPressure[DispenserId] *=10; //Bar;
+ //DispenserPressure[DispenserId] *=10000000; //uBar;
+ //DispenserPressure[DispenserId] *=145.0377; //PSI;
+
+ DispenserPressure[DispenserId] *= 10.0; //MPascal -> Bar
+
+ //if(DispenserPressure[DispenserId] < 0 ) //why????
+ // DispenserPressure[DispenserId] = 0;
+
+ return(DispenserPressure[DispenserId]);
+}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
index 2b582d71b..5fd916667 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
@@ -25,9 +25,7 @@
#include "PMR/stubs/StubDispenserEEpromRequest.pb-c.h"
#include "PMR/stubs/StubDispenserEEpromResponse.pb-c.h"
-
-
-#define I2C_Slave_EEprom_Add 0xA0 //eeprom address - 32kByte & 128kByte
+#define I2C_Slave_EEprom_Add 0xA0 //eeprom address - 32kByte & 128kByte
#define I2C_Slave_EEprom_Add_2 0xA2 //eeprom address - only in the eeprom of 128kByte
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h
index 5fae63651..1a1af1851 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h
@@ -9,11 +9,11 @@
#define DRIVERS_I2C_COMMUNICATION_DISPENSERS_EEPROM_MUX_DISP_EEPROM_MUX_H_
+#define Disp_EEPROM_Header 0x55aacc33
-
-uint32_t I2C_EEprom_Write_Ch(uint8_t Dispenser_ID);
-uint32_t I2C_EEprom_Set_for_Read_Ch(uint8_t Dispenser_ID);
-uint32_t I2C_EEprom_Read_Ch(uint8_t Dispenser_ID);
+uint32_t I2C_EEprom_Write_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add);
+uint32_t I2C_EEprom_Set_for_Read_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add);
+uint32_t I2C_EEprom_Read_Ch(uint8_t Dispenser_ID, uint8_t EEprom_Add);
uint32_t test_disp_eeprom(uint8_t Dispenser_ID , uint8_t EEprom_Add);
uint8_t Check_Dispenser_Type();
diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c
index b1d6110c6..a5ddb694b 100644
--- a/Software/Embedded_SW/Embedded/Main.c
+++ b/Software/Embedded_SW/Embedded/Main.c
@@ -231,7 +231,7 @@ int main(void)
ROM_SysTickIntEnable();
ROM_SysTickEnable();
- Calculateinit();
+ //Calculateinit();//moved to HWConfiguration after reading the dispenser EEPROM
PortFunctionInit();
//FlashInit();
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 035a3b3b3..2cf368ebd 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -483,7 +483,11 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
LOG_ERROR (Dispenser_i, "Dispenser identification failed");
//return ERROR;
}
+
+ status |= I2C_EEprom_Set_for_Read_Ch(Dispenser_i, 0xA0);
+ status |= I2C_EEprom_Read_Ch(Dispenser_i, 0xA0);
}
+ Calculateinit();
}
else
{
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index ad1d5b5c4..b3f21e187 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -12,7 +12,6 @@
#include "PMR/EmbeddedParameters/DispenserRunningData.pb-c.h"
#include "PMR/EmbeddedParameters/DispenserData.pb-c.h"
-#define MAX_SYSTEM_DISPENSERS 8
typedef enum {
LimitSwitchAlarmEmpty_1, //MOTO_DISPENSER_1 = 6,
LimitSwitchAlarmEmpty_2, //MOTO_DISPENSER_2 = 7,
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c
index 4a4e42b41..470bf974e 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c
@@ -21,8 +21,6 @@ HardwareDispenser DispensersCfg[ MAX_SYSTEM_DISPENSERS];
TimerMotors_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS] = {HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8};
-float DispenserPressure[MAX_SYSTEM_DISPENSERS] = {0};
-
float GetDispenserPressure(int DispenserId)
{
return DispenserPressure[DispenserId];
@@ -37,56 +35,6 @@ bool isDispenserInConfig(int DispenserId)
return true;
}
-float Vlow,VHigh,Bits_0Pascal,Bits_1MPascal,a,b;
-void Calculateinit (void)
-{
- Vlow = 0.004 * 130; // 4mA*130ohm = 0.52 V(0 Pascal)
- VHigh = 0.020 *130; // 20mA*130ohm = 2.6V (1M Pascal)
-
- Bits_0Pascal = Vlow * 4096 / 3; // Vlow * 4096bit / 3Vref = 709.973328 bits
- Bits_1MPascal = VHigh * 4096 / 3; // VHigh * 4096bit / 3Vref = 3549.86646 bits
-
- a = (1 - 0) / (Bits_1MPascal - Bits_0Pascal);// Mpascal/Bits = 0.000352125
-
- b = 0 - (a * Bits_0Pascal ); // y = ax + b (x= Bits_0Pascal, 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<Bits_0Pascal)
- data = Bits_0Pascal;//40mA 0Bar
-
- temp = a * data + b;
-
- DispenserPressure[DispenserId] = temp; // [Mpascal] ( 1 Mpascal = 10 Bar )
-
- //unmark one of them to convert from Mpascal to :
- //-----------------------------------
- //DispenserPressure[DispenserId] /= 1000000; //Pascal
- //DispenserPressure[DispenserId] *=10; //Bar;
- //DispenserPressure[DispenserId] *=10000000; //uBar;
- //DispenserPressure[DispenserId] *=145.0377; //PSI;
-
- DispenserPressure[DispenserId] *= 10; //MPascal -> Bar
-
- //if(DispenserPressure[DispenserId] < 0 ) //why????
- // DispenserPressure[DispenserId] = 0;
-
- return(DispenserPressure[DispenserId]);
-}
uint32_t DispenserConfigMessage(HardwareDispenser * request)
diff --git a/Software/PMR/Messages/Stubs/StubDispenserEEpromData.proto b/Software/PMR/Messages/Stubs/StubDispenserEEpromData.proto
index 07328cf70..b5beda6de 100644
--- a/Software/PMR/Messages/Stubs/StubDispenserEEpromData.proto
+++ b/Software/PMR/Messages/Stubs/StubDispenserEEpromData.proto
@@ -12,26 +12,26 @@ message StubDispenserEEpromData
string PCBS_N = 5;
string PCBPartNumber = 6;
string DispenserS_N = 7;
- uint32 MinimalPressure = 8;
- uint32 MaximalPressure = 9;
- uint32 MinimalMV = 10;
- uint32 MaximalMV = 11;
+ int32 MinimalPressure = 8;
+ int32 MaximalPressure = 9;
+ int32 MinimalMV = 10;
+ int32 MaximalMV = 11;
uint32 TotalCycles = 12;
- uint32 BubbleSize = 13;
- uint32 AVG_Nl_stepValue_1_4 = 14;
- uint32 AVG_Nl_stepValue_2_4 = 15;
- uint32 AVG_Nl_stepValue_3_4 = 16;
- uint32 AVG_Nl_stepValue_4_4 = 17;
- uint32 SW_Reserve = 18;
- int32 Spare1_pressure = 19;
- int32 Spare2_pressure = 20;
+ int32 BubbleSize = 13;
+ int32 AVG_Nl_stepValue_1_4 = 14;
+ int32 AVG_Nl_stepValue_2_4 = 15;
+ int32 AVG_Nl_stepValue_3_4 = 16;
+ int32 AVG_Nl_stepValue_4_4 = 17;
+ int32 SW_Reserve = 18;
+ int32 Spare1_pressure = 19;
+ int32 Spare2_pressure = 20;
uint32 MotorPulsesPerCycle = 21;
uint32 Color = 22;
- uint32 PressureSlope = 23;
+ int32 PressureSlope = 23;
string ProductionDate = 24;
uint32 ATSlocation = 25;
- uint32 Spare1 = 26;
- uint32 Spare2 = 27;
+ int32 Spare1 = 26;
+ int32 Spare2 = 27;
uint32 ATSChannel = 28;
bool UnitEmpty = 29;
bool DryRunPass_Fail = 30;
diff --git a/Software/PMR/Messages/Stubs/StubMainCardEEpromWriteResponse.proto b/Software/PMR/Messages/Stubs/StubMainCardEEpromWriteResponse.proto
index f1e8a8897..db9dc8b3f 100644
--- a/Software/PMR/Messages/Stubs/StubMainCardEEpromWriteResponse.proto
+++ b/Software/PMR/Messages/Stubs/StubMainCardEEpromWriteResponse.proto
@@ -1,10 +1,11 @@
syntax = "proto3";
-package Tango.PMR.EmbeddedParameters;
-option java_package = "com.twine.tango.pmr.embeddedparameters";
+package Tango.PMR.Stubs;
+option java_package = "com.twine.tango.pmr.stubs";
message StubMainCardEEpromWriteResponse
{
-
+ int32 Address = 1;
+ int32 Data = 2;
}