diff options
| author | Avi Levkovich <avi@twine-s.com> | 2019-12-25 09:41:07 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2019-12-25 09:41:07 +0200 |
| commit | a86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba (patch) | |
| tree | 5b367315ca1eabb8f3cf6b4ed2036d5fdcae3937 /Software/Embedded_SW | |
| parent | fa266881126ffd6798e9c0634c32eecc24063d49 (diff) | |
| download | Tango-a86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba.tar.gz Tango-a86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba.zip | |
update haed card PT100 and heaters + change the i2c to 400kbps
Diffstat (limited to 'Software/Embedded_SW')
9 files changed, 313 insertions, 257 deletions
diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject index 06fa9a589..454152802 100644 --- a/Software/Embedded_SW/Embedded/.cproject +++ b/Software/Embedded_SW/Embedded/.cproject @@ -170,7 +170,7 @@ </toolChain> </folderInfo> <sourceEntries> - <entry excluding="Drivers/I2C_Communication/WHS_Card/I2C_WHS_Fan_Mux.c|Drivers/I2C_Communication/WHS_Card/IO_Ports_TCA9555|Drivers/I2C_Communication/WHS_Card/D_TCA9546|Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan|Drivers/I2C_Communication/Head_Card/ADC/Head_ADC_old.c|Drivers/I2C_Communication/WHS_Card/PT100|src|EmbParam.cfg" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + <entry excluding="Drivers/I2C_Communication/WHS_Card/EEPROM|Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC|Drivers/I2C_Communication/WHS_Card/D_MAX11614|Drivers/I2C_Communication/WHS_Card/D_ADS122|Drivers/I2C_Communication/WHS_Card/D_AD5272|Drivers/I2C_Communication/WHS_Card/I2C_WHS_Fan_Mux.c|Drivers/I2C_Communication/WHS_Card/IO_Ports_TCA9555|Drivers/I2C_Communication/WHS_Card/D_TCA9546|Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan|Drivers/I2C_Communication/Head_Card/ADC/Head_ADC_old.c|src|EmbParam.cfg" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> </sourceEntries> </configuration> </storageModule> diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 3aa5c3e2e..179a8677c 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -28,15 +28,13 @@ //#define USE_POWERSTEP01 //#define Use_Head_Card //for real card only -//#define Use_Head_Card50 // Shlomo's logic to read PT100 in MillisecTask.c - //#define Use_WHS_Card //for real card only //#define Test_headCard_With_DispCard_I2C4_Add0xE2_DispID_0 -//#define I2C_2_Data_Transfer_Rate_400kbps -//#define I2C_3_Data_Transfer_Rate_400kbps -//#define I2C_4_Data_Transfer_Rate_400kbps +#define I2C_2_Data_Transfer_Rate_400kbps +#define I2C_3_Data_Transfer_Rate_400kbps// Head card + WHS card +#define I2C_4_Data_Transfer_Rate_400kbps #define MAX_ERR_SAMPLES 5 //Number of Samples before sending error #define ERROR_TEMPERATURE_MEASUREMENT 0xFFFF diff --git a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c index 810787b0a..c1b6af4bb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c +++ b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c @@ -177,7 +177,7 @@ uint32_t DeActivateHeater (int HeaterId) #ifdef Use_Head_Card if (HeaterId>HEATER_TYPE__DryerSecondaryHeater) { - HeadCard_Control_Heaters(HeaterTypetoHeadHeater[HeaterId],ON); + HeadCard_Control_Heaters(HeaterTypetoHeadHeater[HeaterId],OFF); } else { @@ -241,7 +241,7 @@ bool GetHeaterState (int HeaterId) } else { - return(Get_HeadCard_Heater_State(HeaterIdtoHeaterpid[HeaterId])); + return(Get_HeadCard_Heater_State(HeaterTypetoHeadHeater[HeaterId])); } #else diff --git a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.h b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.h index cf6a2d235..9bbfb29a6 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.h +++ b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.h @@ -8,6 +8,8 @@ #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "PMR/Diagnostics/HeaterType.pb-c.h" #include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" +#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h" + #define HEATER_TYPE_MAX_HEATERS HEATER_TYPE__HeadCoverHeater2+1 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 c8bfd6f8b..55e902f24 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 @@ -322,151 +322,7 @@ uint32_t HeadCard_Valve_Control(bool Direction) return status; } */ -uint32_t HeadCard_Enable_8_Upper_Heaters(bool Pwr_Cmd)//ON/OFF -{ - uint32_t status = OK; - - Head_I2C_EXP2_0x42.bits.OUTPUT_HEAT_PW_ON = Pwr_Cmd; - - status |= Head_Write_IO_Reg(0x42,HIGH); - - return status; -} -bool HeaterMap[HEADCARD_HIT_MIXER+1] = {0}; -bool Get_HeadCard_Heater_State(uint8_t Heater_ID) -{ - assert(Heater_ID<=HEADCARD_HIT_MIXER); - return HeaterMap[Heater_ID]; -} -uint32_t HeadCard_Control_Heaters(uint8_t Heater_ID, bool Pwr_Cmd)//ON/OFF -{ - uint32_t status = OK; - - assert(Heater_ID<=HEADCARD_HIT_MIXER); - HeaterMap[Heater_ID] = Pwr_Cmd; - switch(Heater_ID) - { - case HEADCARD_HIT_ZN1: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN1 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN2: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN2 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN3: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN3 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN4: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN4 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN5: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN5 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN6: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN6 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN7: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN7 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN8: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN8 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,LOW); - break; - case HEADCARD_HIT_ZN9: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN9 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_HIT_ZN10: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN10 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_HIT_ZN11: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN11 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_HIT_ZN12: - Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN12 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_UPPER_HIT_IN1: - Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN1 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_UPPER_HIT_IN2: - Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_UPPER_HIT_IN3: - Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_UPPER_HIT_IN4: - Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x40,HIGH); - break; - case HEADCARD_UPPER_HIT_OUT1: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT1 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x42,LOW); - break; - case HEADCARD_UPPER_HIT_OUT2: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x42,LOW); - break; - case HEADCARD_UPPER_HIT_OUT3: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x42,LOW); - break; - case HEADCARD_UPPER_HIT_OUT4: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x42,LOW); - break; - case HEADCARD_HIT_MIXER: - Head_I2C_EXP2_0x42.bits.OUTPUT_ON_MIX = Pwr_Cmd; - status |= Head_Write_IO_Reg(0x42,LOW); - break; - default: - break; - } - return status; -} - -uint8_t Disconnect_Mixer_and_12_Heaters_Latch()//Disable the over-current latch -{ - uint8_t status = PASSED; - Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ZN_LATCH_RST = LOW; - status = Head_Write_IO_Reg(0x42,HIGH); - return status; -} - -uint8_t Connect_Mixer_and_12_Heaters_Latch()//enable the over-current latch -{ - uint8_t status = PASSED; - Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ZN_LATCH_RST = HIGH; - status = Head_Write_IO_Reg(0x42,HIGH); - return status; -} - -uint8_t Disconnect_Upper_In_Heaters_Latch()//Disable the over-current latch -{ - uint8_t status = PASSED; - Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTIN_LATCH_RST = LOW; - status = Head_Write_IO_Reg(0x42,HIGH); - return status; -} -uint8_t Disconnect_Upper_Out_Heaters_Latch()//Disable the over-current latch -{ - uint8_t status = PASSED; - Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTOT_LATCH_RST = LOW; - status = Head_Write_IO_Reg(0x42,HIGH); - return status; -} uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Active_Low_Pwr, bool Direction)//Turn on by Short Active Low! (LOW) { @@ -543,57 +399,6 @@ uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID)// -uint32_t HeadCard_Mixer_Over_Current_Safety_Indication()//Active low -//If current value is exceeded the threshold 2.4A, then power switch is disconnected. -//Active low signal BREAK_MIX indicates over-current event of the mixer heater -{ - uint32_t status = No_Safety_Event; - - status |= Head_Read_IO_Reg(0x46,LOW); - - if(Head_I2C_EXP4_0x46.bits.INPUT_BREAK_MIX == LOW) - { - status |= Safety_Event_Occurred; - } - - return status; -} - -uint32_t HeadCard_Upper_Heaters_Over_Current_Safety_Indication()//Active High -//If power value is exceeded the threshold value 740W, the average power consumption is limited at 740W. -{ - uint32_t status = No_Safety_Event; - - status |= Head_Read_IO_Reg(0x46,LOW); - - if(Head_I2C_EXP4_0x46.bits.INPUT_ACTLOW_LIMIT_740W == HIGH) - { - status |= Safety_Event_Occurred; - } - - return status; -} - -uint32_t HeadCard_Heaters_Over_Current_Event_Indication()//Active Low -//If current value is exceeded the threshold 2.15A, then power switch is disconnected. -//Active low signals BREAK_ZNx indicates over-current event of the specific power zone. - -//If current value is exceeded the threshold 5.71A, then the heater power switch is disconnected. -//Active low signals BREAK_HTINx and BREAK_HTOTx indicates over-current event in specific air heater. - -{ - uint32_t status = No_Over_Current_Event; - - status |= Head_Read_IO_Reg(0x44,LOW_AND_HIGH); - status |= Head_Read_IO_Reg(0x4,LOW); - - if((Head_I2C_EXP3_0x44.ushort!= 0xFFFF) && (Head_I2C_EXP4_0x46.ushort!= 0x0F)) - { - status |= Over_Current_Event_Occurred; // need to check every bit to see which one has over current event!!! - } - - return status; -} uint32_t HeadCard_Toggle_PT100_SEL(uint8_t HEAD_CONFIG_PT100_PT_SEL)//HEAD_CONFIG_ODD_PT100_PT_SEL/HEAD_CONFIG_EVEN_PT100_PT_SEL { diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h index 6131dfb79..bb5c647b4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h @@ -161,34 +161,6 @@ extern HEAD_I2C_EXP2_0x42 Head_I2C_EXP2_0x42; extern HEAD_I2C_EXP3_0x44 Head_I2C_EXP3_0x44; extern HEAD_I2C_EXP4_0x46 Head_I2C_EXP4_0x46; -#warning move to heaters enum -typedef enum -{ - HEADCARD_HIT_ZN1, - HEADCARD_HIT_ZN2, - HEADCARD_HIT_ZN3, - HEADCARD_HIT_ZN4, - HEADCARD_HIT_ZN5, - HEADCARD_HIT_ZN6, - HEADCARD_HIT_ZN7, - HEADCARD_HIT_ZN8, - HEADCARD_HIT_ZN9, - HEADCARD_HIT_ZN10, - HEADCARD_HIT_ZN11, - HEADCARD_HIT_ZN12, - - HEADCARD_UPPER_HIT_IN1, - HEADCARD_UPPER_HIT_IN2, - HEADCARD_UPPER_HIT_IN3, - HEADCARD_UPPER_HIT_IN4, - - HEADCARD_UPPER_HIT_OUT1, - HEADCARD_UPPER_HIT_OUT2, - HEADCARD_UPPER_HIT_OUT3, - HEADCARD_UPPER_HIT_OUT4, - - HEADCARD_HIT_MIXER, -}HEADCARD_HEATERS_ENUM; typedef enum { @@ -207,9 +179,8 @@ uint32_t Head_IO_Init(); uint32_t Head_Write_IO_Reg(uint8_t TCA9555_ADDRESS, uint8_t Byte); //LOW/HIGH/LOW_AND_HIGH uint32_t Head_Read_IO_Reg(uint8_t TCA9555_ADDRESS, uint8_t Byte); //LOW/HIGH/LOW_AND_HIGH uint32_t HeadCard_Toggle_PT100_SEL(uint8_t HEAD_CONFIG_PT100_PT_SEL); -uint32_t HeadCard_Control_Heaters(uint8_t Heater_ID, bool Pwr_Cmd);//ON/OFF; -uint8_t Disconnect_Mixer_and_12_Heaters_Latch(); -uint8_t Connect_Mixer_and_12_Heaters_Latch(); +; + uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Active_Low_Pwr, bool Direction); uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID); @@ -221,8 +192,7 @@ uint32_t HeadCard_HeadMagnet_Disable(); uint32_t HeadCard_Valve_Control(bool Direction); -uint32_t HeadCard_Control_Heaters(uint8_t Heater_ID, bool Pwr_Cmd); -bool Get_HeadCard_Heater_State(uint8_t Heater_ID); + //------------------------------ uint8_t Head_Test_IO(); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c index 94679ef57..d80b829e1 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c @@ -6,24 +6,264 @@ */ #include "include.h" -#include "../IO_Ports/Head_IO.h" -#include "../I2C_Head_Mux.h" +#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h" +#include <Drivers/I2C_Communication/Head_Card/I2C_Head_Mux.h> #include <Drivers/I2C_Communication/I2C.h> #include "Head_Heaters.h" -uint32_t Activate_Head_Card_Heaters(Head_Heaters Head_Heater_ID)//12 Zones +bool HeaterMap[HEADCARD_HIT_MIXER+1] = {0}; + +uint32_t Activate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID) { uint32_t status= OK; - Head_I2C_EXP1_0x40.ushort |= Head_Heater_ID; - status = Head_Write_IO_Reg(0x40,LOW_AND_HIGH); + + HeaterMap[Head_Heater_ID] |= (1 << Head_Heater_ID); + + if(Head_Heater_ID <= HEADCARD_UPPER_HIT_IN4) + { + Head_I2C_EXP1_0x40.ushort |= (1 << Head_Heater_ID); + } + else if(Head_Heater_ID <= HEADCARD_HIT_MIXER) + { + Head_I2C_EXP2_0x42.ushort |= (1 << (Head_Heater_ID - 16)); + } + else + status = ERROR; + + return status; +} + +uint32_t Deactivate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID) +{ + uint32_t status= OK; + + HeaterMap[Head_Heater_ID] &= ~(1 << Head_Heater_ID); + + if(Head_Heater_ID <= HEADCARD_UPPER_HIT_IN4) + { + Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID); + } + else if(Head_Heater_ID <= HEADCARD_HIT_MIXER) + { + Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16)); + } + else + status = ERROR; + return status; } -uint32_t Deactivate_Head_Card_Heaters(Head_Heaters Head_Heater_ID)//12 Zones +uint32_t Write_Head_Card_Heaters_Commands() { uint32_t status= OK; - Head_I2C_EXP1_0x40.ushort &= ~Head_Heater_ID; status = Head_Write_IO_Reg(0x40,LOW_AND_HIGH); + status = Head_Write_IO_Reg(0x42,LOW); + return status; +} + +bool Get_HeadCard_Heater_State(uint8_t Heater_ID) +{ + assert(Heater_ID<=HEADCARD_HIT_MIXER); + return HeaterMap[Heater_ID]; +} +uint8_t nop = 0; +uint32_t HeadCard_Control_Heaters(HEADCARD_HEATERS_ENUM Heater_ID, bool Pwr_Cmd)//ON/OFF +{ + uint32_t status = OK; + + assert(Heater_ID<=HEADCARD_HIT_MIXER); + HeaterMap[Heater_ID] = Pwr_Cmd; + + if(Pwr_Cmd == ON) + nop++; + + switch(Heater_ID) + { + case HEADCARD_HIT_ZN1: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN1 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN2: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN2 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN3: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN3 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN4: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN4 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN5: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN5 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN6: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN6 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN7: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN7 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN8: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN8 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,LOW); + break; + case HEADCARD_HIT_ZN9: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN9 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_HIT_ZN10: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN10 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_HIT_ZN11: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN11 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_HIT_ZN12: + Head_I2C_EXP1_0x40.bits.OUTPUT_SWON_ZN12 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_UPPER_HIT_IN1: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN1 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_UPPER_HIT_IN2: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_UPPER_HIT_IN3: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_UPPER_HIT_IN4: + Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x40,HIGH); + break; + case HEADCARD_UPPER_HIT_OUT1: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT1 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x42,LOW); + break; + case HEADCARD_UPPER_HIT_OUT2: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x42,LOW); + break; + case HEADCARD_UPPER_HIT_OUT3: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x42,LOW); + break; + case HEADCARD_UPPER_HIT_OUT4: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x42,LOW); + break; + case HEADCARD_HIT_MIXER: + Head_I2C_EXP2_0x42.bits.OUTPUT_ON_MIX = Pwr_Cmd; + status |= Head_Write_IO_Reg(0x42,LOW); + break; + default: + break; + } + return status; +} + +uint32_t HeadCard_Enable_8_Upper_Heaters(bool Pwr_Cmd)//ON/OFF +{ + uint32_t status = OK; + + Head_I2C_EXP2_0x42.bits.OUTPUT_HEAT_PW_ON = Pwr_Cmd; + + status |= Head_Write_IO_Reg(0x42,HIGH); + + return status; +} + + + +uint8_t Disconnect_Mixer_and_12_Heaters_Latch()//Disable the over-current latch +{ + uint8_t status = PASSED; + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ZN_LATCH_RST = LOW; + status = Head_Write_IO_Reg(0x42,HIGH); + return status; +} + +uint8_t Connect_Mixer_and_12_Heaters_Latch()//enable the over-current latch +{ + uint8_t status = PASSED; + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ZN_LATCH_RST = HIGH; + status = Head_Write_IO_Reg(0x42,HIGH); + return status; +} + +uint8_t Disconnect_Upper_In_Heaters_Latch()//Disable the over-current latch +{ + uint8_t status = PASSED; + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTIN_LATCH_RST = LOW; + status = Head_Write_IO_Reg(0x42,HIGH); + return status; +} + +uint8_t Disconnect_Upper_Out_Heaters_Latch()//Disable the over-current latch +{ + uint8_t status = PASSED; + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_HTOT_LATCH_RST = LOW; + status = Head_Write_IO_Reg(0x42,HIGH); + return status; +} + + +uint32_t HeadCard_Mixer_Over_Current_Safety_Indication()//Active low +//If current value is exceeded the threshold 2.4A, then power switch is disconnected. +//Active low signal BREAK_MIX indicates over-current event of the mixer heater +{ + uint32_t status = No_Safety_Event; + + status |= Head_Read_IO_Reg(0x46,LOW); + + if(Head_I2C_EXP4_0x46.bits.INPUT_BREAK_MIX == LOW) + { + status |= Safety_Event_Occurred; + } + + return status; +} + +uint32_t HeadCard_Upper_Heaters_Over_Current_Safety_Indication()//Active High +//If power value is exceeded the threshold value 740W, the average power consumption is limited at 740W. +{ + uint32_t status = No_Safety_Event; + + status |= Head_Read_IO_Reg(0x46,LOW); + + if(Head_I2C_EXP4_0x46.bits.INPUT_ACTLOW_LIMIT_740W == HIGH) + { + status |= Safety_Event_Occurred; + } + + return status; +} + +uint32_t HeadCard_Heaters_Over_Current_Event_Indication()//Active Low +//If current value is exceeded the threshold 2.15A, then power switch is disconnected. +//Active low signals BREAK_ZNx indicates over-current event of the specific power zone. + +//If current value is exceeded the threshold 5.71A, then the heater power switch is disconnected. +//Active low signals BREAK_HTINx and BREAK_HTOTx indicates over-current event in specific air heater. + +{ + uint32_t status = No_Over_Current_Event; + + status |= Head_Read_IO_Reg(0x44,LOW_AND_HIGH); + status |= Head_Read_IO_Reg(0x4,LOW); + + if((Head_I2C_EXP3_0x44.ushort!= 0xFFFF) && (Head_I2C_EXP4_0x46.ushort!= 0x0F)) + { + status |= Over_Current_Event_Occurred; // need to check every bit to see which one has over current event!!! + } + return status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h index cffdd865d..ba8a72b43 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h @@ -8,7 +8,46 @@ #ifndef DRIVERS_I2C_COMMUNICATION_HEAD_CARD_HEATERS_HEAD_HEATERS_H_ #define DRIVERS_I2C_COMMUNICATION_HEAD_CARD_HEATERS_HEAD_HEATERS_H_ +#warning move to heaters enum +typedef enum +{ + HEADCARD_HIT_ZN1, + HEADCARD_HIT_ZN2, + HEADCARD_HIT_ZN3, + HEADCARD_HIT_ZN4, + HEADCARD_HIT_ZN5, + HEADCARD_HIT_ZN6, + HEADCARD_HIT_ZN7, + HEADCARD_HIT_ZN8, + HEADCARD_HIT_ZN9, + HEADCARD_HIT_ZN10, + HEADCARD_HIT_ZN11, + HEADCARD_HIT_ZN12, + + HEADCARD_UPPER_HIT_IN1, + HEADCARD_UPPER_HIT_IN2, + HEADCARD_UPPER_HIT_IN3, + HEADCARD_UPPER_HIT_IN4, + + HEADCARD_UPPER_HIT_OUT1, + HEADCARD_UPPER_HIT_OUT2, + HEADCARD_UPPER_HIT_OUT3, + HEADCARD_UPPER_HIT_OUT4, + + HEADCARD_HIT_MIXER, +}HEADCARD_HEATERS_ENUM; + +uint32_t Activate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID); +uint32_t Deactivate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID); +uint32_t Write_Head_Card_Heaters_Commands(); +uint32_t HeadCard_Control_Heaters(uint8_t Heater_ID, bool Pwr_Cmd);//ON/OFF +bool Get_HeadCard_Heater_State(uint8_t Heater_ID); + +uint8_t Disconnect_Mixer_and_12_Heaters_Latch(); +uint8_t Connect_Mixer_and_12_Heaters_Latch(); + +/* typedef enum { //Don't change the value - keep it according to the bits in F3_GPO_02_bus @@ -26,5 +65,5 @@ typedef enum HEAD_HEATER_ZN12 = BIT11, }Head_Heaters; - +*/ #endif /* DRIVERS_I2C_COMMUNICATION_HEAD_CARD_HEATERS_HEAD_HEATERS_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 1605092e5..8e3dba01c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -495,11 +495,11 @@ uint32_t MillisecLoop(uint32_t tick) #endif return OK; } -int TemperatureSum[MAX_MAIN_CARD_TEMP_SENS_ID]; -int TemperatureMin[MAX_MAIN_CARD_TEMP_SENS_ID]; -int TemperatureMax[MAX_MAIN_CARD_TEMP_SENS_ID]; -int TemperatureCount[MAX_MAIN_CARD_TEMP_SENS_ID]; -int TemperatureCalc[MAX_MAIN_CARD_TEMP_SENS_ID]; +int TemperatureSum[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureMin[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureMax[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureCount[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureCalc[MAX_HEAD_CARD_TEMP_SENS_ID]; void MillisecUpdateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId,int temperature) { //if(TemperatureCount[SensorId]++>=10) @@ -584,7 +584,7 @@ uint32_t MillisecLowLoop(uint32_t tick) bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick; //bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick,O800Millisecond_Tick,O900Millisecond_Tick; Ten_msTick = (tick%eTenMillisecond == 0) ?true:false; - Fifty_msTick = (tick%eHundredMillisecond == 0) ?true:false; //eFiftyMillisecond + Fifty_msTick = (tick%eHundredMillisecond == 40) ?true:false; //eFiftyMillisecond Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false; m20msecTick = (tick%eHundredMillisecond == 20) ?true:false; m70msecTick = (tick%eHundredMillisecond == 70) ?true:false; @@ -618,27 +618,29 @@ uint32_t MillisecLowLoop(uint32_t tick) Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec) } #endif -#ifdef Use_Head_Card50 +/*#ifdef Use_Head_Card if (m20msecTick) //read odd PT1000 { for (Sensor_i = HEAD_PT100_ZONE_1_0X80_0;Sensor_i < HEAD_PT100_ZONE_2_0X80_1;Sensor_i++) { - MillisecReadFromI2CTempSensor(Sensor_i, NULL); + //MillisecReadFromI2CTempSensor(Sensor_i, NULL); } + //Set_HeadCard_PT100(); #warning call chip select replace in I2C } if (m70msecTick) //read odd PT1000 { for (Sensor_i = HEAD_PT100_ZONE_2_0X80_1;Sensor_i < HEAD_PT100_RESERVE_0X8E_1;Sensor_i++) { - MillisecReadFromI2CTempSensor(Sensor_i, NULL); + //MillisecReadFromI2CTempSensor(Sensor_i, NULL); } + //Set_HeadCard_PT100(); } -#endif +#endif */ if (m90msecTick) { #ifdef Use_Head_Card - for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) + for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++) #else for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) #endif @@ -652,7 +654,7 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Buttons_Reg(); //Ink_Cart_Led(); #ifdef Use_Head_Card - for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) + for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++) #else for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) #endif @@ -722,7 +724,7 @@ uint32_t MillisecLowLoop(uint32_t tick) MachineUpdateResponseFunc(); //KeepAliveOneSecondCall(); #ifdef Use_Head_Card - for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) + for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++) #else for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++) #endif |
