aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-07-20 14:03:17 +0300
committerAvi Levkovich <avi@twine-s.com>2020-07-20 14:03:17 +0300
commit5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9 (patch)
tree939f7c65bd6e838e12bd086f565faba564703014 /Software/Embedded_SW/Embedded
parentd54d5b5ab23b17bb326669231d8ca5615bc54309 (diff)
downloadTango-5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9.tar.gz
Tango-5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9.zip
update actuator logic + reading safety
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c9
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c56
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c14
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h1
6 files changed, 68 insertions, 18 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index 0e38c6e2e..32ea48152 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -20,9 +20,9 @@
#define NO_INITIAL_HEATING
#define MAX_STRING_LEN 255 //Embedded version + filter.c
-#define WATCHDOG
+//#define WATCHDOG
//#define DISPESER_TEST
-//#define FPGA_WATCHDOG_DISABLE
+#define FPGA_WATCHDOG_DISABLE
//#define USE_POWERSTEP01 -NA
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
index 3988712df..24b0fce27 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
@@ -1153,15 +1153,16 @@ uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent)//use STA
return status;
}
-bool Emergency_Push_Button_Report()//TODO move to GPIO folder
+bool Safety_Incident_Report()//TODO move to GPIO folder
{
- bool IsEmergencyPressed = false;
+ bool IsSafetyIncidentOccurred = No_Safety_Event;
if(ROM_GPIOPinRead(GPIO_PORTR_BASE, GPIO_PIN_2)) //EPB_S1 (GPI_PS1_DC_OK)
- IsEmergencyPressed = true;
+ IsSafetyIncidentOccurred = Safety_Event_Occurred;
- return IsEmergencyPressed;
+ return IsSafetyIncidentOccurred;
}
+
/*
bool Dryer_Door_Switch()//move to Get_COVER_1_State
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
index a764e69db..0ff0fa2de 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
@@ -247,7 +247,7 @@ void PumpActivation(uint32_t seconds);
bool IsDryerStopped (void);
uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent);
bool Check_Disp_Safety_Stop_Indication(uint8_t Dispenser_ID);
-bool Emergency_Push_Button_Report();
+bool Safety_Incident_Report();
//bool Dryer_Door_Switch();
uint8_t Pannel_Leds(PANEL_BUTTON_OR_CRAT_ID Pannel_Led_Id, OPERATION_MODE LED_Mode);
uint8_t Init_Machine_Leds();
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
index 24690c25f..05423b8d8 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
@@ -520,6 +520,25 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction)
}
+uint32_t HeadCard_ActStubCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID
+{
+ uint32_t status = OK;
+
+ ACTUATORS Act_ID = (ACTUATORS)(IfIndex);
+
+ if(Act_ID == ACTIN)//0
+ {
+ Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH;
+ }
+ else//if(Act_ID == ACTOUT) 1
+ {
+ Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH;
+ }
+ Trigger_OutputsWriting();//status |= Head_Write_IO_Reg(0x46,HIGH);
+
+ return status;
+}
+
uint32_t HeadCard_Actuators_Stub(ACTUATORS Act_ID, bool Enable, bool Direction)//ENABLE/DISABLE, DOWN/UP/DONTCARE
{
uint32_t status = OK;
@@ -538,6 +557,9 @@ uint32_t HeadCard_Actuators_Stub(ACTUATORS Act_ID, bool Enable, bool Direction)/
{
Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = LOW;
}
+
+ //100msec delay - (need short command - Active LOW )
+ ActControlId = AddControlCallback("ctuatorControl", HeadCard_ActStubCallBackFunction, (eHundredMillisecond), TemplateDataReadCBFunction,Act_ID,0, 0 );
}
else
{
@@ -598,7 +620,7 @@ uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID)//
{
uint32_t Motion_Status = STOPPED;
- //Head_Read_IO_Reg(0x46,HIGH); //I2C task - Actuators_Control
+ //Head_Read_IO_Reg(0x46,HIGH); //Trigger_InputsReading(); Done every Hundred_msTick
if(Act_ID == ACTIN)
{
@@ -650,23 +672,35 @@ uint8_t Head_Test_IO()
return status;
}
-typedef enum {
+#define ACTUATOR_RELOCATING_MOVEUP_TIME 160
+
+typedef enum
+{
ActuatorIdle,
ActuatorMoveDown,
ActuatorWait, //wait for the actuator to get to the lower position
ActuatorMoveUp,
ActuatorLocated
}ActuatorLocatingEnum;
+
ActuatorLocatingEnum ActuatorLocating = ActuatorIdle;
-uint32_t ActuatorLocatingControl = 0xFF;
+uint32_t ActuatorLocatingControl = 0xFF;
uint32_t count_time = 0, moveuptime = 0;
-#define ACTUATOR_RELOCATING_MOVEUP_TIME 160
uint32_t MovingUpTime = ACTUATOR_RELOCATING_MOVEUP_TIME;
-bool isActuatorOnLowestLocation(void)
+
+bool isActuatorOnLowestLocation(void) // Give indication if the actuator stopped in this case reached to the lowest point
{
-#warning give here indication if the actuator reached the lowest point
- return true;
+ bool Status = FALSE;
+
+ //read the inputs in Hundred_msTick
+
+ if(HeadCard_Actuators_Status(ACTIN) == STOPPED)
+ {
+ Status = TRUE;
+ }
+ return Status;
}
+
uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID
{
count_time++;
@@ -675,15 +709,15 @@ uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFla
case ActuatorIdle:
break;
case ActuatorMoveDown:
- Trigger_Head_Actuators_Stub(ACTIN, true, false);
+ Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN);
ActuatorLocating = ActuatorWait;
ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0);
break;
case ActuatorWait:
- if (isActuatorOnLowestLocation())
+ if (isActuatorOnLowestLocation())//read the inputs in Hundred_msTick
{
ActuatorLocating = ActuatorMoveUp;
- Trigger_Head_Actuators_Stub(ACTIN, true, true);
+ Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP);
moveuptime = count_time;
ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0);
}
@@ -691,7 +725,7 @@ uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFla
case ActuatorMoveUp:
if (count_time>=(moveuptime+MovingUpTime))
{
- Trigger_Head_Actuators_Stub(ACTIN, false, false);
+ Trigger_Head_Actuators_Stub(ACTIN, DISABLE, DONTCARE);
ActuatorLocating = ActuatorLocated;
ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0);
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
index c06e8f4df..f126c254b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
@@ -275,6 +275,19 @@ void Trigger_InputsReading(void)
}
+void Trigger_OutputsWriting(void)
+{
+ I2C_ReadingMessageStruc I2C_ReadingMessage;
+ //uint8_t Midtank_i;
+
+ I2C_ReadingMessage.messageId = Head_Outputs_Writing;
+ if (I2C_ReadingMsgQ != NULL)
+ Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT);
+ return;
+
+}
+
+
void Trigger_WHS_init_IO(void)
{
I2C_ReadingMessageStruc I2C_ReadingMessage;
@@ -653,6 +666,7 @@ void I2C_ReadingTask(UArg arg0, UArg arg1)
Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT
break;
case Head_Outputs_Writing:
+ Head_Write_IO_Reg(0x46,HIGH);//ACT
break;
case DispenserReadData:
Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
index 2a98296b4..16f86f9ed 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
@@ -51,6 +51,7 @@ void Trigger_Head_Actuators_Stub(uint32_t Act_ID, bool Active_Low_Pwr, bool Dire
void Trigger_Head_Actuators_Disable(void);
void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM);
void Trigger_InputsReading(void);
+void Trigger_OutputsWriting(void);
void Trigger_Head_Magnet(int direction);
void Trigger_Head_MixerValve(int direction);
void Trigger_Head_PressureArc(bool Enable_Disable);