aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-04-07 15:53:25 +0300
committerAvi Levkovich <avi@twine-s.com>2020-04-07 15:53:25 +0300
commit088deb6845a4f20407a01aa2fe120c27e95d60ff (patch)
treebe5ee92ef478a3c388bf13c12b001a780f08943c /Software/Embedded_SW/Embedded
parent91fde2b410712c7866b9d3d139d97ee8db008223 (diff)
downloadTango-088deb6845a4f20407a01aa2fe120c27e95d60ff.tar.gz
Tango-088deb6845a4f20407a01aa2fe120c27e95d60ff.zip
update waste volume measurment logic
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c86
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h19
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c16
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c72
7 files changed, 161 insertions, 39 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
index f813e9b91..fd2ada25c 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
@@ -20,6 +20,9 @@
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
#include "drivers/Flash_ram/MCU_E2Prom.h"
+#include <Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h>
+#include "modules/control/control.h"
+
uint16_t Orf_zero_value[DRIER_FLOW_METER+1] = {1112,0,1040};
#warning get Orf_zero_value for all orf
@@ -378,39 +381,98 @@ double GetWHSAirFlow(uint8_t OR_Id)
return Q_value ;
}
-#define coefficient 9.72
+#warning need to update low and high limits and to read the eeprom on the initialization
+
+#define DefaultCoefficient 9.72//TBD
+#define Coefficient_LowLimit 0//TBD
+#define Coefficient_HighLimit 255//TBD
+
+#define defaultVo_ml 100//TBD
+#define Vo_LowLimit_ml 1//TBD
+#define Vo_HighLimit_ml 5000//TBD
+
double GetWHSWasteTankLevelMiliLiter()
{
uint16_t Vm = 0;
- uint16_t V0 = 0;
+ uint16_t LocalV0 = 0;
double waste_volume_ml = 0.0;
+ double LocalCoefficient;
get_vlev1(&Vm);
- MCU_E2PromRead(EEPROM_WASTE_TANK_ZERO_VALUE,&V0);
- waste_volume_ml = (coefficient * (Vm -V0));
+
+ //MCU_E2PromRead(EEPROM_WASTE_TANK_ZERO_VALUE,&V0);//read once in the initialization process
+
+ if(0)//-- TBD -- ((WHS_Eeprom.bytes.flow_calc_coefficient_C <= Coefficient_LowLimit) || (WHS_Eeprom.bytes.flow_calc_coefficient_C >=Coefficient_HighLimit))
+ {
+ LocalCoefficient = DefaultCoefficient;
+ ReportWithPackageFilter(WasteFilter,"------------ using DefaultCoefficient-----------------", __FILE__,__LINE__, WHS_Eeprom.bytes.flow_calc_coefficient_C, RpMessage, 0, 0);
+ }
+ else
+ {
+ LocalCoefficient = WHS_Eeprom.bytes.flow_calc_coefficient_C ;
+ }
+
+ if(0)//-- TBD -- ((WHS_Eeprom.bytes.Orifice_Waste_Level_V0 <= Vo_LowLimit_ml) || (WHS_Eeprom.bytes.Orifice_Waste_Level_V0 >=Vo_HighLimit_ml))
+ {
+ LocalV0 = defaultVo_ml;
+ ReportWithPackageFilter(WasteFilter,"------------ using defaultVo_ml-----------------", __FILE__,__LINE__, WHS_Eeprom.bytes.Orifice_Waste_Level_V0, RpMessage, 0, 0);
+ }
+ else
+ {
+ LocalV0 = WHS_Eeprom.bytes.Orifice_Waste_Level_V0 ;
+ }
+
+ waste_volume_ml = (LocalCoefficient * (Vm -LocalV0));
ReportWithPackageFilter(WasteFilter,"------------ waste_volume_ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_volume_ml * 1000), 0);
return waste_volume_ml;
}
#define OPEN_WASTE_VALVE 0
#define CLOSE_WASTE_VALVE 1
-bool waste_seq()
+
+uint32_t WasteControlId = 0xFF;
+
+double waste_level_ml = 0.0;
+double Cartridge_Max_level_ml = 1500.0;
+
+bool waste_seq_step2(uint32_t IfIndex, uint32_t BusyFlag)
{
bool status = OK;
- double waste_level = 0.0;
- ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- Trigger_SetWHS_VOC_Valve(OPEN_WASTE_VALVE);
- ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ static double Initial_waste_level_ml = 0.0;
+
+ if (SafeRemoveControlCallback(WasteControlId, waste_seq_step2 )==OK)
+ WasteControlId = 0xFF;
+ else
+ Report("Remove control callback failed",__FILE__,__LINE__,(int)WasteControlId,RpWarning,(int)waste_seq_step2,0);
ReportWithPackageFilter(WasteFilter,"------------ close waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
Trigger_SetWHS_VOC_Valve(CLOSE_WASTE_VALVE);
- waste_level = GetWHSWasteTankLevelMiliLiter();
- ReportWithPackageFilter(WasteFilter,"------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_level*1000), 0);
-
+ waste_level_ml = GetWHSWasteTankLevelMiliLiter();
+ ReportWithPackageFilter(WasteFilter,"------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_level_ml*1000), 0);
+ if(waste_level_ml < (Initial_waste_level_ml - Cartridge_Max_level_ml))
+ {
+ //waste empting
+ }
+ else
+ {
+ Initial_waste_level_ml = waste_level_ml;
+ }
return status;
}
+bool waste_seq_step1()
+{
+ bool status = OK;
+
+ ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ Trigger_SetWHS_VOC_Valve(OPEN_WASTE_VALVE);
+
+ ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ WasteControlId = AddControlCallback(NULL, waste_seq_step2, eOneSecond, TemplateDataReadCBFunction,0,0, 0 );
+
+ return status;
+}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h
index 223135e37..2365e0baf 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h
@@ -61,7 +61,8 @@ bool get_cur_vlv1(uint16_t *value);
-
+bool waste_seq_step1();
+bool waste_seq_step2();
double GetWHSAirFlow(uint8_t OR_Id);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
index dfd49a71b..0832280c2 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
@@ -15,7 +15,7 @@
//EEPROM M24M01-DFMN6TP
//uint32_t I2C_WHS_EEPROM_SLAVE_ADD = 0xA0;
-
+WHS_EEPROM WHS_Eeprom;
uint8_t WHS_Type = WHS_TYPE_UNKNOWN;
#define MAX_ALLOWS_PAGE_WRITE 256
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h
index c64f8705c..05a8ed95a 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h
@@ -8,6 +8,25 @@
#ifndef DRIVERS_I2C_COMMUNICATION_WHS_CARD_EEPROM_WHS_EEPROM_H_
#define DRIVERS_I2C_COMMUNICATION_WHS_CARD_EEPROM_WHS_EEPROM_H_
+typedef struct
+{
+
+ uint8_t PCB_SN[20];
+ uint8_t Module_SN[20];
+ double Orifice_Pressure_V0[3]; // (measured orifice sensor voltage without flow) value for each orifice sensor
+ double Orifice_Waste_Level_V0; // (measured orifice sensor voltage without flow) value for each orifice sensor
+ double flow_calc_coefficient_C; // C (flow calculation coefficient) value (=0.239)
+
+}WHS_EEPROM_BYTES;
+
+typedef union
+{
+ WHS_EEPROM_BYTES bytes;
+ uint8_t Buf[sizeof(WHS_EEPROM_BYTES)];
+}WHS_EEPROM;
+
+extern WHS_EEPROM WHS_Eeprom;
+
/*
typedef struct
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
index bdcb52a9a..2f05a26a9 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
@@ -221,6 +221,8 @@ bool WHS_IO_Init_HW_0()
//*** set port value ***//
WHS_Write_IO_AllReg(I2CExp2_ADDRESS);
+
+ return OK;
}
uint8_t WHS_Read_Hardware_Version()
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index a5421e60a..84b31c322 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -61,6 +61,8 @@
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
#include "Modules/Heaters/Heaters_ex.h"
#include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
+
Task_Handle Millisecond_Task_Handle;
/******************** Definitions ********************************************/
@@ -732,6 +734,20 @@ uint32_t MillisecLowLoop(uint32_t tick)
WHS_Blower_Avarege(HEAD_FLOW_METER);
WHS_Blower_Avarege(DRIER_FLOW_METER);
WHS_Start_Blower_Control_Closed_Loop ();
+
+ static uint8_t Whs_emptying_cycle = 0;
+
+ // #warning TBD need to define the timing
+ if(Whs_emptying_cycle >= 2)
+ {
+ waste_seq_step1();// include 1Sec delay
+ Whs_emptying_cycle = 0;
+ }
+ else
+ {
+ Whs_emptying_cycle++;
+ }
+
}
}
if (OneMinute_Tick)
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
index 99b96ddf3..485b28ccc 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
@@ -17,10 +17,34 @@
#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
#include <Drivers/I2C_Communication/WHS_Card/EEPROM/D_EEPROM.h>
#include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h>
+#include <Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h>
bool test_9555(void);
bool WHS_I2C_EEprom_Write_Ch_shai_taest(void);
+uint8_t WHS_Write_Buf[9];
+uint8_t WHS_Read_Buf[9];
+#define PAGE 256
+
+bool WHS_I2C_EEprom_Read_Buf()
+{
+ bool status= OK;
+
+ uint8_t address_high_byte = 0x00;
+ uint8_t address_low_byte = 0x00;
+
+ status |= Select_Main_WHS_Mux_Channel();
+
+ //Set to read
+ WHS_Write_Buf[0] = address_high_byte;
+ WHS_Write_Buf[1] = address_low_byte;
+ status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2);
+
+ status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Eeprom.Buf, sizeof(WHS_EEPROM_BYTES));
+
+ return status;
+}
+
bool newWHS_init(void)
{
bool status = OK;
@@ -39,6 +63,7 @@ bool newWHS_init(void)
Trigger_WHS_MAX11614_Init();
Trigger_WHS_Rheostat_init();
+ status |= WHS_I2C_EEprom_Read_Buf();
//status |= WHS_IO_Init();
//status |= init_WHS_fan();
//
@@ -62,7 +87,6 @@ bool newWHS_init(void)
//Trigger_SetWHSBlowerVoltage (0x0C00);
-
return status;
}
@@ -76,9 +100,7 @@ bool test_9555(void)
return status;
}
-uint8_t WHS_Write_Buf[9];
-uint8_t WHS_Read_Buf[9];
-#define PAGE 256
+
bool WHS_I2C_EEprom_Write_Ch_shai_taest()
{
bool status= OK;
@@ -104,24 +126,24 @@ bool WHS_I2C_EEprom_Write_Ch_shai_taest()
address= i*256;
}
-// status |= Select_Main_WHS_Mux_Channel();
-//
-// WHS_Write_Buf[0] = address_high_byte;
-// WHS_Write_Buf[1] = address_low_byte;
-// WHS_Write_Buf[2] = 0xAA;
-// WHS_Write_Buf[4] = 0xAA;
-// WHS_Write_Buf[6] = 0xAA;
-// WHS_Write_Buf[8] = 0xAA;
-// WHS_Write_Buf[3] = 0x55;
-// WHS_Write_Buf[5] = 0x55;
-// WHS_Write_Buf[7] = 0x55;
-//
-//
-//
-//
-// status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 9);
-// SysCtlDelay(5000000);//Must delay for at least 5 milli. !!! (See data sheet )
-// status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2);
-// status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7);
- return status;
-}
+ // status |= Select_Main_WHS_Mux_Channel();
+ //
+ // WHS_Write_Buf[0] = address_high_byte;
+ // WHS_Write_Buf[1] = address_low_byte;
+ // WHS_Write_Buf[2] = 0xAA;
+ // WHS_Write_Buf[4] = 0xAA;
+ // WHS_Write_Buf[6] = 0xAA;
+ // WHS_Write_Buf[8] = 0xAA;
+ // WHS_Write_Buf[3] = 0x55;
+ // WHS_Write_Buf[5] = 0x55;
+ // WHS_Write_Buf[7] = 0x55;
+ //
+ //
+ //
+ //
+ // status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 9);
+ // SysCtlDelay(5000000);//Must delay for at least 5 milli. !!! (See data sheet )
+ // status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2);
+ // status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7);
+ return status;
+ }