aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Control
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c56
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c30
2 files changed, 38 insertions, 48 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index c8b4a306c..fdd5feef9 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -56,10 +56,8 @@
#include "Modules/General/buttons.h"
#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h"
-#ifdef Use_WHS_Card
#include <Drivers/I2C_Communication/WHS_Card/D_ADS122_PT100/WHS_PT100_ADC.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
-#endif
Task_Handle Millisecond_Task_Handle;
/******************** Definitions ********************************************/
@@ -606,9 +604,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
OneHourTick = (tick%eOneHour == 0) ?true:false;
//gather Motor data from FPGA
//ROM_IntMasterDisable();
-
+ int StartPT100 = 0;
//Screw_ENC_Velocity_to_DAC(); - for testing the screw enc
-
+ if (Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
+ StartPT100 = TEMP_SENSE_ANALOG_DRYER_TEMP1;
if (Ten_msTick)
{
//Speed_Data = Calculate_Speed_Sensor_Velocity();
@@ -619,39 +618,14 @@ uint32_t MillisecLowLoop(uint32_t tick)
Trigger_HeaterWriting();
}
-#ifdef Use_Head_Card
if(Fifty_msTick)
{
Trigger_PT100_Read();//call every 50mSec (minimum delay 30mSec)
//Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec)
}
-#endif
-/*#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);
- }
- //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);
- }
- //Set_HeadCard_PT100();
- }
-#endif */
if (m90msecTick)
{
-#ifdef Use_Head_Card
- 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
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
MillisecReadFromTempSensor(Sensor_i, NULL);
}
@@ -664,11 +638,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
///////////////////////////////////////////////////////////////////
-#ifdef Use_Head_Card
- 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
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
MillisecUpdateTemperatures (Sensor_i,TemperatureSensorRead(Sensor_i));
}
@@ -689,10 +659,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
ADC_TriggerCollection();
}
-#ifdef Use_Head_Card
- //Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS
-#endif
-
+ Trigger_InputsReading();
}
if (Gradient_Tick)
DispensersCollectionCall();
@@ -737,14 +704,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
static int Counter = 0;
MachineUpdateResponseFunc();
KeepAliveOneSecondCall();
-#ifdef Use_Head_Card
+
TemperatureListString(Lenstr);
ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0);
-//#ifdef Use_Head_Card
- 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
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i);
}
@@ -755,10 +718,8 @@ uint32_t MillisecLowLoop(uint32_t tick)
PressureCalc[Disp_i] = MillisecCalculatePressures(Disp_i);
}
}
-#ifdef Use_WHS_Card
Trigger_WHS_PT100_Read_All();
Trigger_WHS_MAX11614_Read_allADC();
-#endif
}
if (OneMinute_Tick)
@@ -779,6 +740,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
midtankDisplay = 1-midtankDisplay;
Gas_PPM_Info = Calculate_Gas_Power_Consumption();
//Trigger_WHS_MAX11614_Read_allADC();
+ ResetControlTime();
}
if (OneHourTick)
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index e093815a9..e85a36057 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -108,6 +108,7 @@ ControlDeviceStruc ControlArray[MAX_TANGO_CONTROL_DEVICES];
uint32_t ControlDatalog[MAX_TANGO_CONTROL_DEVICES];
#define MAX_BACKLOG_SIZE 100
uint16_t ControlBacklog[MAX_BACKLOG_SIZE]={0};
+uint32_t ControlTime[MAX_TANGO_CONTROL_DEVICES]={0};
uint16_t backlogindex = 0;
uint32_t Control_timerBase = TIMER0_BASE; //Timer handle
uint32_t MaxHighDevices = 0xFF;
@@ -556,8 +557,22 @@ uint32_t ControlLoop(uint32_t tick)
return OK;
}
+uint32_t prevtick = 0;
+void ResetControlTime(void)
+{
+ memset(ControlTime,0,sizeof(ControlTime));
+}
uint32_t ControlLowLoop(uint32_t tick)
{
+ uint32_t tempp,tempq,delta;
+ uint32_t skipped_ticks = 0;
+ if (tick-prevtick>1)
+ {
+ skipped_ticks = tick-prevtick-1;
+ //Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0);
+ }
+ prevtick = tick;
+
for (ControlLowDevice_i = 0; ControlLowDevice_i < MAX_TANGO_CONTROL_DEVICES;ControlLowDevice_i++)
{
if (ControlArray[ControlLowDevice_i].ControlActive)
@@ -566,12 +581,13 @@ uint32_t ControlLowLoop(uint32_t tick)
continue;
if (ControlArray[ControlLowDevice_i].ControlTiming == eOneMillisecond)
continue;
- if (((tick - ControlArray[ControlLowDevice_i].StartTick)%ControlArray[ControlLowDevice_i].ControlTiming)==0) // run the control on exact intervals
+ if (((tick - ControlArray[ControlLowDevice_i].StartTick)%ControlArray[ControlLowDevice_i].ControlTiming)<=skipped_ticks) // run the control on exact intervals
{
ControlBacklog[backlogindex]=ControlLowDevice_i;
if ( ++backlogindex >= MAX_BACKLOG_SIZE)
backlogindex = 0;
+ tempp = HibernateRTCSSGet();
if(ControlArray[ControlLowDevice_i].ControlDataReadPtr)
ControlDatalog[ControlLowDevice_i] = ControlArray[ControlLowDevice_i].ControlDataReadPtr( ControlArray[ControlLowDevice_i].Parameter1);
else
@@ -580,6 +596,18 @@ uint32_t ControlLowLoop(uint32_t tick)
ControlArray[ControlLowDevice_i].ControlCallbackPtr(ControlArray[ControlLowDevice_i].IfIndex, ControlDatalog[ControlLowDevice_i]);
else
LOG_ERROR (ControlLowDevice_i, "Invalid callback ptr");
+ tempq = HibernateRTCSSGet();
+ if (tempq < tempp)
+ {
+ delta = (32768 - tempp) + tempq + 1;
+ }
+ else
+ delta = tempq - tempp;
+
+ if (ControlTime[ControlLowDevice_i]<delta)
+ {
+ ControlTime[ControlLowDevice_i] = delta;
+ }
}
} //if control active
} //for