aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-12-25 09:41:07 +0200
committerAvi Levkovich <avi@twine-s.com>2019-12-25 09:41:07 +0200
commita86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba (patch)
tree5b367315ca1eabb8f3cf6b4ed2036d5fdcae3937 /Software/Embedded_SW
parentfa266881126ffd6798e9c0634c32eecc24063d49 (diff)
downloadTango-a86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba.tar.gz
Tango-a86effb8ead3adc8109c1fd7a9f4f2a04b85c4ba.zip
update haed card PT100 and heaters + change the i2c to 400kbps
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/.cproject2
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h8
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Heater/Heater.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c195
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h36
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c254
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.h41
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c28
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