From b3589be05166fdd15692a9a835262d6e04e56bd2 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 5 Feb 2020 16:00:59 +0200 Subject: fix continuous bug, alarm handling timing, control timing, initialization. --- .../Embedded/Modules/Control/MillisecTask.c | 4 +++ .../Embedded_SW/Embedded/Modules/Control/control.c | 36 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index fdd5feef9..a9b539690 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -623,6 +623,10 @@ uint32_t MillisecLowLoop(uint32_t tick) Trigger_PT100_Read();//call every 50mSec (minimum delay 30mSec) //Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec) } + if(m70msecTick) + { + AlarmHandling_ControlTrigger(0,0); + } if (m90msecTick) { for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index e85a36057..02a216ba6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -65,9 +65,10 @@ #include "MillisecTask.h" - +//#define CONTROL_DEBUG +#define DURATION_LIMIT 5 /******************** Definitions ********************************************/ -#define MAX_TANGO_CONTROL_DEVICES 120 +#define MAX_TANGO_CONTROL_DEVICES 100 /******************** STRUCTURES AND ENUMs ********************************************/ @@ -383,6 +384,7 @@ uint32_t AddControlCallback(char* Name, ControlCBFunction Callback, uint32_t Ct if (deviceId == 0xFF) { LOG_ERROR(deviceId, "Add Callback failed"); + AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true); return 0xFF; } key = GateMutex_enter(gateControlDB); @@ -564,12 +566,16 @@ void ResetControlTime(void) } uint32_t ControlLowLoop(uint32_t tick) { - uint32_t tempp,tempq,delta; uint32_t skipped_ticks = 0; +#ifdef CONTROL_DEBUG + uint32_t tempp,tempq,delta; + uint32_t sys_ticks_start = msec_millisecondCounter,sys_ticks_end,max = 0,dev = 0; +#endif if (tick-prevtick>1) { skipped_ticks = tick-prevtick-1; - //Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0); + if (tick-prevtick>10) + Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0); } prevtick = tick; @@ -586,8 +592,9 @@ uint32_t ControlLowLoop(uint32_t tick) ControlBacklog[backlogindex]=ControlLowDevice_i; if ( ++backlogindex >= MAX_BACKLOG_SIZE) backlogindex = 0; - +#ifdef CONTROL_DEBUG tempp = HibernateRTCSSGet(); +#endif if(ControlArray[ControlLowDevice_i].ControlDataReadPtr) ControlDatalog[ControlLowDevice_i] = ControlArray[ControlLowDevice_i].ControlDataReadPtr( ControlArray[ControlLowDevice_i].Parameter1); else @@ -596,6 +603,7 @@ 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"); +#ifdef CONTROL_DEBUG tempq = HibernateRTCSSGet(); if (tempq < tempp) { @@ -603,14 +611,30 @@ uint32_t ControlLowLoop(uint32_t tick) } else delta = tempq - tempp; - if (ControlTime[ControlLowDevice_i] DURATION_LIMIT) + { + Report("ControlLowLoop long",__FILE__,sys_ticks_end-sys_ticks_start,(int)sys_ticks_end,RpWarning,(int)sys_ticks_start,0); + for (ControlLowDevice_i = 0; ControlLowDevice_i < MAX_TANGO_CONTROL_DEVICES;ControlLowDevice_i++) + { + if (ControlTime[ControlLowDevice_i]>max) + { + max = ControlTime[ControlLowDevice_i]; + dev = ControlLowDevice_i; + } + } + Report(ControlArray[dev].Name,__FILE__,__LINE__,dev,RpWarning,max,0); + } +#endif //ROM_IntMasterEnable(); return OK; -- cgit v1.3.1 From 5bf44be1121abf9dd36c948c19ca0650f5571c3e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 6 Feb 2020 13:51:20 +0200 Subject: fix job bug and I2C_Task for LP machines --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 33 ++++++++++------------ .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 2 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 4 +-- .../Modules/Diagnostics/DiagnosticsHoming.c | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 4 +-- .../Embedded/StateMachines/Printing/JobSTM.c | 5 ++-- 6 files changed, 23 insertions(+), 27 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 79bbb4df8..bf1151d6e 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -53,6 +53,7 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; MessageContainer responseContainer; + bool last = true; usnprintf(activateString, 1000, "file %d of %d bytes %d of %d",CurrentRunningFile,NumberOfFiles,vme_index,CurrentFileSize); @@ -60,16 +61,9 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) if (CurrentRunningFiletoken, false, &response, &dispenser_homing_response__pack, &dispenser_homing_response__get_packed_size); responseContainer.has_continuous = true; -responseContainer.continuous = true; + responseContainer.continuous = true; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index fb3b78752..e53adabb7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -73,14 +73,14 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest) MotorsCfg[Motor_i].pulseperround = request->pulseperround; MotorsCfg[Motor_i].pulleyradius = request->pulleyradius; MotorsCfg[Motor_i].configword = request->configword; - if(MotorDriverResponse[Motor_i].DriverType == CombinrdMotDriver) + /*if(MotorDriverResponse[Motor_i].DriverType == CombinrdMotDriver) { MotorsCfg[Motor_i].directionthreadwize = request->directionthreadwize ^ 1;//PowerSTEP01 } else { MotorsCfg[Motor_i].directionthreadwize = request->directionthreadwize;//L6470 + L6472 - } + }*/ MotorsCfg[Motor_i].kvalhold = request->kvalhold; MotorsCfg[Motor_i].kvalrun = request->kvalrun; MotorsCfg[Motor_i].kvalacc = request->kvalacc; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index d36de9bd7..a62d1b4b7 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -926,6 +926,8 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes //responseContainer = createContainer(MESSAGE_TYPE__JobResponse, JobToken, done, &JobResponseMsg, &job_response__pack, &job_response__get_packed_size); responseContainer = createAllocatedContainer(MESSAGE_TYPE__JobResponse, JobToken, done, &JobResponseMsg, &job_response__pack, &job_response__get_packed_size,&JobStatusBuffer); } + responseContainer.has_continuous = true; + responseContainer.continuous = true; container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (done == true) @@ -942,9 +944,6 @@ void SendJobProgress(double ProcessedLength, int SegmentId, bool done, char *Mes responseContainer.error = ERROR_CODE__CONTINUOUS_RESPONSE_ABORTED; } } - responseContainer.has_continuous = true; - responseContainer.continuous = true; - if (container_buffer) { size_t container_size = message_container__pack(&responseContainer, container_buffer); -- cgit v1.3.1 From 33c0ce2e46a6fca8b48396f8aab1150197af20f3 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 6 Feb 2020 15:22:42 +0200 Subject: read and handle version update (from MCU EEPROM) --- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 24 ++++++++++++++++++++++ .../Embedded/Drivers/flash_ram/MCU_E2Prom.h | 4 ++++ Software/Embedded_SW/Embedded/Main.c | 14 +++++++++++++ .../Embedded/Modules/Control/MillisecTask.c | 2 +- 4 files changed, 43 insertions(+), 1 deletion(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index c3a74efa9..7d9c5e02f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -10,6 +10,7 @@ #include "MCU_E2Prom.h" #include "driverlib/eeprom.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "Common/SW_Info/SW_Info.h" uint32_t E2Prom_Data[MAX_EEPROM_STORAGE] = {0,0,0,0,0,0}; uint32_t MCU_E2PromProgram(int Address,uint32_t Data) @@ -134,6 +135,29 @@ float MCU_E2PromDryerBacklashRead() return Data; } +uint32_t MCU_E2PromEmbeddedVersionProgram(void) +{ + uint16_t size; + uint32_t Data; + size= sizeof(TangoVersion_t); + if (size>4) + { + Report("MCU_E2PromEmbeddedVersionProgram length error",__FILE__,__LINE__,size,RpWarning,(int)0,0); + return ERROR; + } + memcpy((uint8_t*)&Data,&_gTangoVersion,size); + EEPROMProgram((uint32_t *)&Data, EMBEDDED_VERSION_ADDR*4, 4); + return OK; +} +uint32_t MCU_E2PromEmbeddedVersionRead() +{ + uint32_t Data; + EEPROMRead((uint32_t *)&Data,EMBEDDED_VERSION_ADDR*4, 4); + + Report("MCU_E2PromEmbeddedVersionRead length ",__FILE__,__LINE__,EMBEDDED_VERSION_ADDR*4,RpWarning,(int)(Data),0); + + return Data; +} //Each word may not be subject to more than a specific number of programming cycles before an //erase cycle is required. In other words, for any given word, FlashProgram can only be called diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index 5cab24587..39c892e0a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -34,6 +34,7 @@ typedef enum { EEPROM_STORAGE_SERIAL_NUM, EEPROM_STORAGE_MAC_ADDR, EEPROM_STORAGE_DRYER_BACKLASH, + EEPROM_STORAGE_EMBEDDED_VERSION, MAX_EEPROM_STORAGE }EEPROM_STORAGE_USAGE_ENUM; #define MAX_SERIAL_NUM_LEN 20 @@ -41,6 +42,7 @@ typedef enum { #define SERIAL_NUM_ADDR EEPROM_STORAGE_SERIAL_NUM*4 #define MAC_ADDR_ADDR (SERIAL_NUM_ADDR + MAX_SERIAL_NUM_LEN) #define DRYER_BACKLASH_ADDR (MAC_ADDR_ADDR + MAX_MAC_ADDR_LEN) +#define EMBEDDED_VERSION_ADDR (DRYER_BACKLASH_ADDR+1) uint32_t MCU_E2PromProgram(int Address,uint32_t Data); uint32_t MCU_E2PromRead(int Address,uint32_t *Data); @@ -52,6 +54,8 @@ uint32_t MCU_E2PromSerialNumProgram(char *Data); uint32_t MCU_E2PromSerialNumRead(char* *Data); uint32_t MCU_E2PromDryerBacklashProgram(char *Data); float MCU_E2PromDryerBacklashRead(void); +uint32_t MCU_E2PromEmbeddedVersionProgram(void); +uint32_t MCU_E2PromEmbeddedVersionRead(); extern char Serial[21]; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 9469f9b97..d0ebb8274 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -47,6 +47,8 @@ #include "Drivers/USBStick_FileSys/USBstick.h" #include "Drivers/USBStick_FileSys/USBMSCHFatFs.h" */ +#include "Common/SW_Info/SW_Info.h" + #include "Modules/Control/control.h" #include "Modules/Control/MillisecTask.h" #include "Modules/Heaters/Heaters_ex.h" @@ -233,7 +235,19 @@ int main(void) //FlashInit(); #ifndef EVALUATION_BOARD + TangoVersion_t Version; + uint32_t Data; + MCU_E2PromInit(); + Data = MCU_E2PromEmbeddedVersionRead(); + memcpy (&Version,&Data,4); + if (memcmp(&Version,&_gTangoVersion,4)) + { + LOG_ERROR(Version.m_minor,"Version change, do stuff"); + FlashInit(); + MCU_E2PromEmbeddedVersionProgram(); + } + #endif #ifdef EVALUATION_BOARD Init_EVB(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a9b539690..6542af287 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -707,7 +707,7 @@ uint32_t MillisecLowLoop(uint32_t tick) char Lenstr[160]; static int Counter = 0; MachineUpdateResponseFunc(); - KeepAliveOneSecondCall(); + //KeepAliveOneSecondCall(); TemperatureListString(Lenstr); ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0); -- cgit v1.3.1 From 589bffe306db793987c17cd46f1dcac81f47bdcb Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Fri, 7 Feb 2020 13:03:22 +0200 Subject: remove some warnings --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 1 + .../Embedded/Common/Utilities/idle_task.c | 6 +- .../Embedded_SW/Embedded/Common/report/report.h | 1 + .../Embedded/Common/report/reportInit.c | 13 ++-- .../Head_Card/IO_Ports/Heaters/Head_Heaters.h | 2 +- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 21 ++---- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 4 +- .../Embedded/Drivers/flash_ram/FlashProgram.c | 2 +- Software/Embedded_SW/Embedded/Main.c | 1 + .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 5 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 2 + .../Embedded/Modules/Control/MillisecTask.c | 8 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 2 + .../Modules/Diagnostics/DiagnosticActions.c | 4 +- .../Embedded/Modules/General/GeneralHardware.c | 1 + .../Embedded_SW/Embedded/Modules/Heaters/Heaters.h | 1 + .../Embedded/Modules/Heaters/Heaters_init.c | 1 + .../Embedded/Modules/Heaters/Heaters_print.c | 88 ++++++++++++++++++++-- .../Modules/Stubs_Handler/StubRealTimeUsage.c | 2 +- .../Embedded/Modules/Thread/ThreadLoad.c | 2 +- .../Embedded/Modules/Thread/Thread_print.c | 8 +- 21 files changed, 124 insertions(+), 51 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index bf1151d6e..24f02f60c 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -24,6 +24,7 @@ #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h" #include "drivers/FPGA/Full_Vme/ispvme/vmopcode.h" +#include "drivers/Flash_ram/FlashProgram.h" #include "Common/Utilities/Utils.h" #include "Common/SWUpdate/FileSystem.h" diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c index 8d1040ea2..9a1de790e 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c @@ -202,9 +202,9 @@ uint32_t unload_max_count=0; void IdleTaskGetLoadTable (uint32_t *aBuffer) { int i; - for (i=0;i<100;i++) - aBuffer[i] = idle_load_table[i]; - //memcpy (aBuffer,idle_load_table,sizeof(idle_load_table)); + //for (i=0;i<100;i++) + // aBuffer[i] = idle_load_table[i]; + memcpy (aBuffer,idle_load_table,sizeof(idle_load_table)); } uint32_t MillisecCounter = 0; uint32_t ControlCounter = 0; diff --git a/Software/Embedded_SW/Embedded/Common/report/report.h b/Software/Embedded_SW/Embedded/Common/report/report.h index 35253ce80..2d7e93ca5 100644 --- a/Software/Embedded_SW/Embedded/Common/report/report.h +++ b/Software/Embedded_SW/Embedded/Common/report/report.h @@ -130,6 +130,7 @@ void ReportResetReason(void); uint32_t OpenLogFile(void); uint32_t CloseLogFile(void); bool isReportActive(void); +uint32_t LogToFile(char *message, char *FileName, int LineNumber,int errorCode,int Severity,int parameter); /*************************************************************************** diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index c8a11ce10..6ed149039 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -79,9 +79,9 @@ bool isReportActive(void) } uint32_t OpenLogFile(void) { - uint32_t Bytes = 0; - int len; - /*LogFresult = f_open(LogFileHandle,LogPath,FA_OPEN_ALWAYS | FA_WRITE | FA_READ); + /*int len; + uint32_t Bytes = 0; + LogFresult = f_open(LogFileHandle,LogPath,FA_OPEN_ALWAYS | FA_WRITE | FA_READ); if (LogFresult == FR_OK) { if (LogFileHandle->fsize < 100000) @@ -105,11 +105,12 @@ uint32_t LogToFile(char *message, /* The formatted message int Severity, /* user parameter no. 1 */ int parameter) { - uint32_t Bytes = 0; - int len; /* print user supplied error code */ - /* len = usnprintf(message, 300, "\r\n %s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter); + /* uint32_t Bytes = 0; + int len; + + len = usnprintf(message, 300, "\r\n %s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter); LogFresult = f_write(LogFileHandle,message,len,&Bytes );*/ return LogFresult; 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 fc3f88057..32a0dd8e0 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,7 @@ #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, 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 8670a56b4..f659d965a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -74,21 +74,12 @@ void Trigger_Heater_Current_Read(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; uint8_t Heater_i=0; - uint8_t Heater_Lim=0; - if(Head_Type == HEAD_TYPE_SYLKO_WITHOUT_CARD) - Heater_Lim = NUM_OF_CURRENT_HEATERS; - if(Head_Type == HEAD_TYPE_SYLKO) - Heater_Lim = HEAD_NUM_OF_ADC; - if(Head_Type == HEAD_TYPE_STAPLE_SPUN) - Heater_Lim = HEAD_NUM_OF_ADC; - - // for (Heater_i = 0;Heater_i < Heater_Lim;Heater_i++)//No need - reads all inputs at the same time - { - I2C_ReadingMessage.messageId = Heater_Current_Reading; - I2C_ReadingMessage.parameter = Heater_i; - if (I2C_ReadingMsgQ != NULL) - Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); - } + + I2C_ReadingMessage.messageId = Heater_Current_Reading; + I2C_ReadingMessage.parameter = Heater_i; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 59405be76..cf54019c5 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -417,7 +417,7 @@ uint32_t Valve3WayCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callback_fptr callback) //direction: MidTank_Dispenser or Dispenser_Mixer { - uint32_t busy = false; + //uint32_t busy = false; //Report("Control3WayValvesWithCallback ",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)direction,0); if (Valve3WayControlId[_ValveId] != 0xFF) { @@ -432,7 +432,7 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb Report("Add control callback failed",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); //else // Report("Add control callback",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); - busy = FPGA_GetDispenserValveBusyOCD(_ValveId,0); + /*busy = */FPGA_GetDispenserValveBusyOCD(_ValveId,0); //Report("Set valve id, dir, busy",__FILE__,_ValveId,(int)direction,RpWarning,(int)busy,0); EnableDisableDispenserValve(_ValveId, ENABLE); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index 37c2280c9..bef2b1727 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -132,7 +132,7 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) { volatile uint32_t ui32Idx; - uint32_t status; + //uint32_t status; #ifdef FLASH_DEBUG Address[RxIndex] = ui32FlashStart; Size[RxIndex] = ui32FileSize; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index da92b6fdf..393a366ac 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -53,6 +53,7 @@ #include "Modules/Control/MillisecTask.h" #include "Modules/Heaters/Heaters_ex.h" #include "Modules/Ids/Ids_ex.h" +#include "Modules/AlarmHandling/AlarmHandling.h" #include "StateMachines/Printing/PrintingSTM.h" #include "StateMachines/Initialization/InitSequence.h" diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 9fe67d773..03135c0d5 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -876,7 +876,6 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { if (HeaterCheckReady()==false) { -#warning fit to new head with new alarms for (Heater_i=HEATER_TYPE__DryerAirHeater;Heater_i - +#include "Drivers/I2C_Communication/I2C_Task.h" +#include "Drivers/I2C_Communication/I2C.h" #include "modules/ids/ids_ex.h" /******************************************************************************** diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 35065cc2a..ec7650f3d 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -40,6 +40,7 @@ #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/Valves/Valve.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "Drivers/I2C_Communication/I2C.h" #include "drivers/Flash_ram/MCU_E2Prom.h" #include "StateMachines/Printing/PrintingSTM.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h index 05425cc45..b1d870919 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h @@ -17,6 +17,7 @@ extern int DCTimeSliceAllocation[HEATER_TYPE_MAX_HEATERS]; extern int NumberOFSlicesInUse; extern uint32_t MillisecondsPerChange; +void initializeArrays(void); typedef struct HeaterPIDControlConfigstruc { diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index 237722779..0f6cb5124 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -68,6 +68,7 @@ uint32_t Heaters_Init(void) memset(HeaterControl,0,sizeof(HeaterControl)); for (i = 0;i HEAD_TYPE_SYLKO_WITHOUT_CARD) + { + HeaterId2PT100Id[HEATER_TYPE__DryerAirHeater] = DRYER_AIR_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater] = DRYER_MAIN_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater] = DRYER_SECONDARY_PT100; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone1] = HEAD_PT100_ZONE_1_0X80_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone2] = HEAD_PT100_ZONE_2_0X80_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone3] = HEAD_PT100_ZONE_3_0X82_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone4] = HEAD_PT100_ZONE_4_0X82_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone5] = HEAD_PT100_ZONE_5_0X84_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone6] = HEAD_PT100_ZONE_6_0X84_1; + HeaterId2PT100Id[HEATER_TYPE__MixerHeater] = HEAD_PT100_MIXER_0X8E_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone7] = HEAD_PT100_ZONE_7_0X86_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone8] = HEAD_PT100_ZONE_8_0X86_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone9] = HEAD_PT100_ZONE_9_0X88_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone10] = HEAD_PT100_ZONE_10_0X88_1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone11] = HEAD_PT100_ZONE_11_0X8A_0; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone12] = HEAD_PT100_ZONE_12_0X8A_1; + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater1] = HEAD_PT100_AIR_HEATER_2_0X8C_1; + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater2] = HEAD_PT100_AIR_HEATER_1_0X8C_0 ; + + HeaterId2CurrentId[HEATER_TYPE__DryerAirHeater] = NUM_OF_CURRENT_HEATERS; + HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater] = HEATER_DRYER_CURRENT_1; + HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater] = HEATER_DRYER_CURRENT_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone1] = HEAD_CURRENT_ZONE_1; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone2] = HEAD_CURRENT_ZONE_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone3] = HEAD_CURRENT_ZONE_3; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone4] = HEAD_CURRENT_ZONE_4; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone5] = HEAD_CURRENT_ZONE_5; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone6] = HEAD_CURRENT_ZONE_6; + HeaterId2CurrentId[HEATER_TYPE__MixerHeater] = HEAD_CURRENT_MIXER; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone7] = HEAD_CURRENT_ZONE_7; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone8] = HEAD_CURRENT_ZONE_8; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone9] = HEAD_CURRENT_ZONE_9; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone10] = HEAD_CURRENT_ZONE_10; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone11] = HEAD_CURRENT_ZONE_11; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone12] = HEAD_CURRENT_ZONE_12; + HeaterId2CurrentId[HEATER_TYPE__HeadCoverHeater1] = HEAD_CURRENT_HTIN_1; + HeaterId2CurrentId[HEATER_TYPE__HeadCoverHeater2] = HEAD_CURRENT_HTOT_1; + + } + else + { + HeaterId2PT100Id[HEATER_TYPE__DryerAirHeater] = DRYER_AIR_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater] = DRYER_MAIN_PT100; + HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater] = DRYER_SECONDARY_PT100; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone1] = TEMP_SENSE_ANALOG_DYEINGH_TEMP1; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone2] = TEMP_SENSE_ANALOG_DYEINGH_TEMP2; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone3] = TEMP_SENSE_ANALOG_DYEINGH_TEMP3; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone4] = TEMP_SENSE_ANALOG_DYEINGH_TEMP4; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone5] = TEMP_SENSE_ANALOG_DYEINGH_TEMP5; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone6] = HEAD6_PT100; + HeaterId2PT100Id[HEATER_TYPE__MixerHeater] = MIXER_PT100; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone7] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone8] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone9] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone10] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone11] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeaterZone12] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater1] = 0xFF; + HeaterId2PT100Id[HEATER_TYPE__HeadCoverHeater2] = 0xFF; + + HeaterId2CurrentId[HEATER_TYPE__DryerAirHeater] = NUM_OF_CURRENT_HEATERS; + HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater] = HEATER_DRYER_CURRENT_1; + HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater] = HEATER_DRYER_CURRENT_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone1] = HEATER_HEAD_CURRENT_ZONE_1; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone2] = HEATER_HEAD_CURRENT_ZONE_2; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone3] = HEATER_HEAD_CURRENT_ZONE_3; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone4] = HEATER_HEAD_CURRENT_ZONE_4; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone5] = HEATER_HEAD_CURRENT_ZONE_5_6; + HeaterId2CurrentId[HEATER_TYPE__HeaterZone6] = HEATER_HEAD_CURRENT_ZONE_5_6; + HeaterId2CurrentId[HEATER_TYPE__MixerHeater] = HEATER_MIXCHIP_CURRENT; + + } +} uint32_t DryerInternalPT100Id = DRYER_AIR_PT100; bool HeatersRestart = false; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c index 2091b3bc5..765e183cb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c @@ -46,7 +46,7 @@ void Stub_RealTimeUsageRequest(MessageContainer* requestContainer) StubRealTimeUsageResponse response = STUB_REAL_TIME_USAGE_RESPONSE__INIT; - response.n_percentile = 100; + response.n_percentile = 101; response.percentile = my_malloc(sizeof(response.percentile)*response.n_percentile); if (response.percentile) IdleTaskGetLoadTable(response.percentile); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 5dc354785..2a83f8425 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -31,7 +31,7 @@ #include "drivers/SSI_Comm/Dancer/Dancer.h" #include "drivers/motors/motor.h" #include "drivers/Flash_ram/MCU_E2Prom.h" - +#include "Drivers/I2C_Communication/I2C.h" #include "PMR/Stubs/StubHeatingTestRequest.pb-c.h" #include "PMR/Stubs/StubHeatingTestResponse.pb-c.h" #include "PMR/Stubs/StubHeatingTestPollRequest.pb-c.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 59b5642fb..fd53d6da2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -910,7 +910,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) void SetOriginMotorSpeed(float process_speed) { - int i,Motor_i, HW_Motor_Id; + int Motor_i, HW_Motor_Id; for (Motor_i = 0; Motor_i <= WINDER_MOTOR; Motor_i++) { HW_Motor_Id = ThreadMotorIdToMotorId[Motor_i]; @@ -1108,7 +1108,7 @@ char Endstr[150]; { int Motor_i; ThreadControlActive = false; - uint32_t status = OK,tempCtl; + uint32_t status = OK; usnprintf(Endstr, 100, "Total _processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength); SendJobProgress(0.0,0,false, Endstr); ReportWithPackageFilter(ThreadFilter,Endstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); @@ -1122,7 +1122,7 @@ char Endstr[150]; if (SpeedControlId != 0xFF) { if(RemoveControlCallback(SpeedControlId,ThreadLengthCBFunction)!=OK) - ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)SpeedControlId,0); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)ThreadLengthCBFunction,RpError,(int)SpeedControlId,0); SpeedControlId = 0xFF; } if (PoolerSpeedControlId != 0xFF) @@ -1134,7 +1134,6 @@ char Endstr[150]; for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++) { - tempCtl = ControlIdtoMotorId[Motor_i]; if (ControlIdtoMotorId[Motor_i] != 0xFF) { status = RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction); @@ -1143,7 +1142,6 @@ char Endstr[150]; else ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)ControlIdtoMotorId[Motor_i],0); } - //ReportWithPackageFilter(ThreadFilter,"Remove Control",__FILE__,Motor_i,(int)status,RpError,(int)tempCtl,0); } Task_sleep(100); -- cgit v1.3.1 From 1ae720e9052b2419200c113ad1fa42550382e6c7 Mon Sep 17 00:00:00 2001 From: Shai Frieder Date: Sun, 9 Feb 2020 10:16:29 +0200 Subject: add: stub to read WHS Fan Tachometer --- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 40 +++++++- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 5 +- .../WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.c | 113 ++++++++++++--------- .../WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.h | 6 +- .../WHS_Card/D_EMC2302_Fan/WHS_Fan.c | 79 ++++++++++++-- .../WHS_Card/D_EMC2302_Fan/WHS_Fan.h | 56 +++++----- .../WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c | 2 + .../Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded/Modules/Stubs_Handler/Progress.c | 8 +- .../Stubs Collection/stubs/newWHS/Fan_speed.cs | 8 +- 10 files changed, 219 insertions(+), 100 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') 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 f659d965a..4308a7913 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -41,6 +41,7 @@ typedef enum Actuators_Control, /* enum for WHS :*/ + DetectNewWHS, WHS_start, WHS_init_I2C_IO, WHS_init_fan, @@ -52,6 +53,7 @@ typedef enum WHS_init_Rheostat, WHS_SET_FAN_SPEED, WHS_READ_FAN_TACHO, + WHS_READ_ALL_FAN_TACHO, WHS_SET_VOLT_BLOWER_CONTROL, WHS_SET_VAlVE_CARTRIDGE, WHS_SET_PUMP, @@ -159,6 +161,16 @@ void Trigger_InputsReading(void) } +void Trigger_Check_WHS_Type_Via_EEPROM() +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + + I2C_ReadingMessage.messageId = DetectNewWHS; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; +} + void Trigger_WHS_init_IO(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -256,17 +268,31 @@ void Trigger_SetWHSFanSpeed(uint8_t fan_id, uint8_t speed) return; } -void Trigger_ReadWHSFanTacho (uint8_t fan_id, uint8_t* tacho_value) +void Trigger_ReadWHSFanTacho (uint8_t fan_id) { I2C_ReadingMessageStruc I2C_ReadingMessage; I2C_ReadingMessage.messageId = WHS_READ_FAN_TACHO; I2C_ReadingMessage.parameter = fan_id; - I2C_ReadingMessage.parameter3 = tacho_value; if (I2C_ReadingMsgQ != NULL) Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); return; } + +void Trigger_WHSReadAllFanTacho () +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + + I2C_ReadingMessage.messageId = WHS_READ_ALL_FAN_TACHO; + + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; +} + + + + void Trigger_SetWHSBlowerVoltage (uint16_t voltage) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -435,6 +461,10 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) } break; + case DetectNewWHS: + Check_WHS_Type_Via_EEPROM(); + break; + case WHS_init_I2C_IO: WHS_IO_Init(); break; @@ -464,7 +494,11 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) break; case WHS_READ_FAN_TACHO: - WHS_Read_fan_tach(I2C_ReadingMessage.parameter, I2C_ReadingMessage.parameter3);//todo + WHS_Read_fan_tach(I2C_ReadingMessage.parameter);//todo + break; + + case WHS_READ_ALL_FAN_TACHO: + Read_All_WHS_Fans_Tach(); break; case WHS_SET_VOLT_BLOWER_CONTROL: 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 16db6132f..4f5712442 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -10,7 +10,7 @@ #define DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_ - +void Trigger_Check_WHS_Type_Via_EEPROM(void); void Trigger_WHS_init_IO(void); void Trigger_WHS_init_fan(void); void Trigger_WHS_init_PT100(void); @@ -22,7 +22,8 @@ void Trigger_WHS_I2C_EEprom_Read(uint32_t address, uint16_t size, uint8_t *p_dat //void Trigger_WHS_set_fan_speed( fan_num, uint16_t fan_speed); void Trigger_SetWHSFanSpeed (uint8_t fan_id, uint8_t speed); -void Trigger_ReadWHSFanTacho (uint8_t fan_id, uint8_t* tacho_value); //todo +void Trigger_ReadWHSFanTacho (uint8_t fan_id); //todo +void Trigger_WHSReadAllFanTacho (void); void Trigger_WHS_PT100_Read_All(void); void Trigger_ReadWHSPT100(uint8_t PT100_Id); //void Trigger_WHS_Set_Volt_Blower_Control(uint16_t volt); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.c index 01d9592b0..2d410e2c4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.c @@ -32,8 +32,8 @@ /****************************************************************************** * Module Variable Definitions *******************************************************************************/ -uint8_t readbuffer[2]; -uint8_t writebuffer[2]; +//uint8_t readbuffer[2]; +//uint8_t writebuffer[2]; //uint32_t I2C_FAN_SLAVE_ADD = 0x5C; @@ -41,13 +41,13 @@ uint8_t writebuffer[2]; -uint16_t Fan_Tach[2] = {0,0}; +//uint16_t Fan_Tach[2] = {0,0}; uint8_t D_Fan_PWM_Command[2] = {0,0}; -D_EMC2302_READ D_EMC2302_Read; -D_EMC2302_WRITE D_EMC2302_Write; +//D_EMC2302_READ D_EMC2302_Read; +//D_EMC2302_WRITE D_EMC2302_Write; //uint8_t D_EMC2302_Reg_Add[EMC2302_Size] = { //0x20,0x24,0x25,0x26,0x27,0x29,0x2A,0x2B,0x2D, @@ -223,11 +223,13 @@ D_EMC2302_WRITE D_EMC2302_Write; uint8_t D_fan_productID(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr, uint8_t *productID) { uint8_t status = OK; - writebuffer[0] = EMC2301_PRODUCT_ID; - readbuffer[0] = 0; - status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); + uint8_t writebuffer = EMC2301_PRODUCT_ID; + + //writebuffer[0] = EMC2301_PRODUCT_ID; + //readbuffer[0] = 0; + status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); delayUs(10);//TODO - check the delay - status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1,productID , 1);// readbuffer + status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, productID , 1);// readbuffer //Fan_Info.Product_ID = readbuffer[0]; return status; } @@ -235,8 +237,9 @@ uint8_t D_fan_productID(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr uint8_t D_fan_manufactuerID(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr, uint8_t *manufactuerID) { uint8_t status = OK; - writebuffer[0] = EMC2301_MANUFACTUERE_ID; - status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); + uint8_t writebuffer = EMC2301_MANUFACTUERE_ID; + + status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); delayUs(10);//TODO - check the delay status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, manufactuerID, 1); //Fan_Info.Product_ID = readbuffer[0]; @@ -246,8 +249,9 @@ uint8_t D_fan_manufactuerID(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_ uint8_t D_fan_revision(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr, uint8_t *revision) { uint8_t status = OK; - writebuffer[0] = EMC2301_REVISION; - status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); + uint8_t writebuffer = EMC2301_REVISION; + + status |= I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); delayUs(10);//TODO - check the delay status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, revision, 1); //Fan_Info.Product_ID = readbuffer[0]; @@ -257,11 +261,15 @@ uint8_t D_fan_revision(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr, uint8_t D_Fan_PWM_Polarity_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan_ID, bool polarity_config) { uint8_t status = ERROR; - D_EMC2302_Write.Reg.PWM_Polarity_Config |= (polarity_config << Fan_ID); + uint8_t writebuffer[2] = {0,0}; + uint8_t PWM_Polarity_Config = 0; + + PWM_Polarity_Config |= (polarity_config << Fan_ID); - writebuffer[0] = EMC2301_PWM_POLARITY; - writebuffer[1] = D_EMC2302_Write.Reg.PWM_Polarity_Config; - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 2); + writebuffer[0] = EMC2301_PWM_POLARITY; + writebuffer[1] = PWM_Polarity_Config; + + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 2); return status; } @@ -269,11 +277,15 @@ uint8_t D_Fan_PWM_Polarity_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC230 uint8_t D_Fan_PWM_Output_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan_ID, bool output_config) { uint8_t status = ERROR; - D_EMC2302_Write.Reg.PWM_Output_Config |= (output_config << Fan_ID); + uint8_t writebuffer[2] = {0,0}; + uint8_t PWM_Output_Config = 0; + + PWM_Output_Config |= (output_config << Fan_ID); - writebuffer[0] = EMC2301_PWM_OUTPUT_CONFIG; - writebuffer[1] = D_EMC2302_Write.Reg.PWM_Output_Config; // - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 2); + writebuffer[0] = EMC2301_PWM_OUTPUT_CONFIG; + writebuffer[1] = PWM_Output_Config; // + + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 2); return status; } @@ -281,6 +293,7 @@ uint8_t D_Fan_PWM_Output_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_ uint8_t D_Fan_Setting(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t fan_speed) { uint8_t status = ERROR; + uint8_t writebuffer[2] = {0,0}; if(Fan == 0) { @@ -292,49 +305,55 @@ uint8_t D_Fan_Setting(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, writebuffer[0] = EMC2301_FAN_2_SETTING; writebuffer[1] = fan_speed; //D_EMC2302_Write.Reg.Fan_Setting[1]; } - ReportWithPackageFilter(WasteFilter,"------------ set Fan speed-----------------", __FILE__,__LINE__,fan_speed, RpMessage, 0, 0); + ReportWithPackageFilter(WasteFilter,"------------ set Fan speed-----------------", __FILE__,__LINE__, fan_speed, RpMessage, Fan, 0); status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 2); return status; } -uint8_t D_Fan_Read_Tacho(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint16_t *data) + +uint8_t D_Fan_Read_Tacho_HIGH(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t *p_data) { uint8_t status = ERROR; + uint8_t writebuffer = 0; + if(Fan == 0) { - writebuffer[0] = EMC2301_TACH_1_READING_HIGH; - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); + writebuffer = EMC2301_TACH_1_READING_HIGH; + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); delayUs(10);//TODO - check the delay - status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, readbuffer, 1); - D_EMC2302_Read.Reg.TACHReading_High[0] = readbuffer[0]; - - writebuffer[0] = EMC2301_TACH_1_READING_LOW; - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); - delayUs(10);//TODO - check the delay - status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, readbuffer, 1); - D_EMC2302_Read.Reg.TACHReading_Low[0] = readbuffer[0]; - - *data = (D_EMC2302_Read.Reg.TACHReading_High[0] << 8) | D_EMC2302_Read.Reg.TACHReading_Low[0]; - //*data = Fan_Tach[0]; + status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, p_data, 1); } else { - writebuffer[0] = EMC2301_TACH_2_READING_HIGH; - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); + writebuffer = EMC2301_TACH_2_READING_HIGH; + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); delayUs(10);//TODO - check the delay - status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, readbuffer, 1); - D_EMC2302_Read.Reg.TACHReading_High[1] = readbuffer[0]; + status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, p_data, 1); + } - writebuffer[0] = EMC2301_TACH_2_READING_LOW; - status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, writebuffer, 1); - delayUs(10);//TODO - check the delay - status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, readbuffer, 1); - D_EMC2302_Read.Reg.TACHReading_Low[1] = readbuffer[0]; + return status; +} - //Fan_Tach[1] = (D_EMC2302_Read.Reg.TACHReading_High[1] << 8) | D_EMC2302_Read.Reg.TACHReading_Low[1]; - *data = (D_EMC2302_Read.Reg.TACHReading_High[1] << 8) | D_EMC2302_Read.Reg.TACHReading_Low[1]; +uint8_t D_Fan_Read_Tacho_LOW(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t *p_data) +{ + uint8_t status = ERROR; + uint8_t writebuffer = 0; + + if(Fan == 0) + { + writebuffer = EMC2301_TACH_1_READING_LOW; + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); + delayUs(10);//TODO - check the delay + status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, p_data, 1); + } + else + { + writebuffer = EMC2301_TACH_2_READING_LOW; + status = I2C_Write(EMC2302_I2C_bus_number, EMC2302_I2C_addr, &writebuffer, 1); + delayUs(10);//TODO - check the delay + status |= I2C_Read(EMC2302_I2C_bus_number, EMC2302_I2C_addr + 1, p_data, 1); } return status; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.h index 1882d9806..24fb847d0 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/D_EMC2302_fan.h @@ -816,9 +816,9 @@ uint8_t D_fan_revision(uint8_t EMC2302_I2C_bus_number, uint8_t EMC2302_I2C_addr, uint8_t D_Fan_PWM_Polarity_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan_ID, bool polarity_config); uint8_t D_Fan_PWM_Output_Config(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan_ID, bool output_config); uint8_t D_Fan_Setting(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t fan_speed); -uint8_t D_Fan_Read_Tacho(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint16_t *data); - - +//uint8_t D_Fan_Read_Tacho(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint16_t *data); +uint8_t D_Fan_Read_Tacho_HIGH(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t *p_data); +uint8_t D_Fan_Read_Tacho_LOW(uint8_t EMC2302_I2C_bus_number ,uint8_t EMC2302_I2C_addr, bool Fan, uint8_t *p_data); #ifdef __cplusplus } // extern "C" #endif diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c index 1a93153e9..ab7ea8303 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c @@ -14,13 +14,15 @@ FAN_DRIVER_INFO Fan_Driver_Info[maxFAN-1]; +#define NUM_OF_FAN_DRIVER 3 + #define FAN_SPEED_OFF 0x00 #define PUSH_PULL 1 uint8_t Fan_Mux_Channel = UNKNOWN; bool Select_WHS_Fan_Mux_Channel(WHS_fan_num fan_number); - +uint8_t Select_Fan_Driver(WHS_fan_num fan_number); /* @@ -35,8 +37,32 @@ https://github.com/TekkaTim/esp32_learning/blob/master/lib/EMC2302.py //FAN EMC2302-1-AIZL +D_EMC2302_READ D_EMC2302_Read[NUM_OF_FAN_DRIVER]; +D_EMC2302_WRITE D_EMC2302_Write[NUM_OF_FAN_DRIVER]; +uint8_t Select_Fan_Driver(WHS_fan_num fan_number) +{ + uint8_t fan_driver = 0; + switch (fan_number) + { + case FAN1: + case FAN2: + fan_driver = 0; + break; + case FAN3: + case FAN4: + fan_driver = 1; + break; + case FAN5: + case FAN6: + fan_driver = 2; + break; + //default: + + } + return fan_driver; +} bool Select_WHS_Fan_Mux_Channel(WHS_fan_num fan_number) { @@ -80,26 +106,55 @@ bool Select_WHS_Fan_Mux_Channel(WHS_fan_num fan_number) bool WHS_set_fan_speed(WHS_fan_num fan_number, uint8_t fan_speed) { bool status = OK; + uint8_t fan_driver = 0; + fan_driver = Select_Fan_Driver(fan_number); status = Select_Main_WHS_Mux_Channel(); Select_WHS_Fan_Mux_Channel(fan_number); status |= D_Fan_Setting(I2C_ID_WHS_CARD ,I2CFanViaSwitch_ADDRESS, !(fan_number & 0x01), fan_speed); + D_EMC2302_Write[fan_driver].Reg.Fan_Setting[!(fan_number & 0x01)] = fan_speed; return status; } -bool WHS_Read_fan_tach(WHS_fan_num fan_number, uint16_t *fan_tacho) +bool WHS_Read_fan_tach(WHS_fan_num fan_number) { bool status = OK; + uint8_t fan_driver = 0; + fan_driver = Select_Fan_Driver(fan_number); status = Select_Main_WHS_Mux_Channel(); Select_WHS_Fan_Mux_Channel(fan_number); - //status |= D_Fan_Setting(I2C_ID_WHS_CARD ,I2CFanViaSwitch_ADDRESS, !(fan_number & 0x01), fan_speed); - status |= D_Fan_Read_Tacho(I2C_ID_WHS_CARD ,I2CFanViaSwitch_ADDRESS, !(fan_number & 0x01), &fan_tacho); + + status |= D_Fan_Read_Tacho_HIGH(I2C_ID_WHS_CARD ,I2CFanViaSwitch_ADDRESS, !(fan_number & 0x01), &(D_EMC2302_Read[fan_driver].Reg.TACHReading_High[!(fan_number & 0x01)])); + status |= D_Fan_Read_Tacho_LOW (I2C_ID_WHS_CARD ,I2CFanViaSwitch_ADDRESS, !(fan_number & 0x01), &(D_EMC2302_Read[fan_driver].Reg.TACHReading_Low [!(fan_number & 0x01)])); return status; } +uint16_t WHS_Get_fan_tach(WHS_fan_num fan_number) +{ + uint16_t tach = 0; + uint8_t fan_driver = 0; + + fan_driver = Select_Fan_Driver(fan_number); + tach = D_EMC2302_Read[fan_driver].Reg.TACHReading_High[!(fan_number & 0x01)]; + tach = ((tach << 8) | D_EMC2302_Read[fan_driver].Reg.TACHReading_Low[!(fan_number & 0x01)]); + + return tach; +} + + +void Read_All_WHS_Fans_Tach() +{ + WHS_fan_num fan_number=0; + + for (fan_number = FAN1 ; fan_number < maxFAN; fan_number++) + { + WHS_Read_fan_tach(fan_number); + } +} + #define FAN_BREAK BIT0 #define FAN_ALERT_12 BIT1 #define FAN_ALERT_34 BIT2 @@ -136,6 +191,7 @@ bool WHS_Get_fan_ALERT(WHS_fan_num fan_number, bool *fan_alert) return status; } + bool init_WHS_fan() { bool status = OK; @@ -268,19 +324,20 @@ bool Test_WHS_Fan() if (status == OK) { Trigger_SetWHSFanSpeed(fan_number, 0x20); - delayms(4000); + Task_sleep(4000); Trigger_SetWHSFanSpeed(fan_number, fan_tacho); - delayms(1000); + Task_sleep(1000); Trigger_SetWHSFanSpeed(fan_number, 0x80); - delayms(4000); + Task_sleep(4000); Trigger_SetWHSFanSpeed(fan_number, fan_tacho); - delayms(1000); + Task_sleep(1000); Trigger_SetWHSFanSpeed(fan_number, 0xFF); - delayms(4000); + Task_sleep(4000); + Trigger_SetWHSFanSpeed(fan_number, fan_tacho); + Task_sleep(1000); Trigger_SetWHSFanSpeed(fan_number, FAN_SPEED_OFF); - delayms(4000); + Task_sleep(4000); Trigger_SetWHSFanSpeed(fan_number, fan_tacho); - delayms(1000); } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h index 3e8171df8..c8a81a612 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h @@ -11,37 +11,37 @@ typedef struct { //Configuration and control - uint8_t Configuration ; - uint8_t Fan_Status ; - uint8_t Fan_Stall_Status ; - uint8_t Fan_Spin_Status ; - uint8_t Drive_Fail_Status ; - uint8_t Fan_Interrupt_Enable ; +// uint8_t Configuration ; +// uint8_t Fan_Status ; +// uint8_t Fan_Stall_Status ; +// uint8_t Fan_Spin_Status ; +// uint8_t Drive_Fail_Status ; +// uint8_t Fan_Interrupt_Enable ; uint8_t PWM_Polarity_Config ; uint8_t PWM_Output_Config ; - uint8_t PWM_Base_Freq ; - //Fan 1 & 2 Control Registers +// uint8_t PWM_Base_Freq ; +// //Fan 1 & 2 Control Registers uint8_t Fan_Setting[2] ; - uint8_t PWM_Divide[2] ; - uint8_t FanConfig_1[2] ; - uint8_t FanConfig_2[2] ; - uint8_t Gain[2] ; - uint8_t FanSpin_Up_Config[2] ; - uint8_t FanMax_Step[2] ; - uint8_t FanMinimum_Drive[2] ; - uint8_t FanValid_TACH_Count[2] ; - uint8_t FanDrive_Fail_Low[2] ; - uint8_t FanDrive_Fail_High[2] ; - uint8_t TACHTarget_Low[2] ; - uint8_t TACHTarget_High[2] ; - uint16_t TACHReading_High[2] ; +// uint8_t PWM_Divide[2] ; +// uint8_t FanConfig_1[2] ; +// uint8_t FanConfig_2[2] ; +// uint8_t Gain[2] ; +// uint8_t FanSpin_Up_Config[2] ; +// uint8_t FanMax_Step[2] ; +// uint8_t FanMinimum_Drive[2] ; +// uint8_t FanValid_TACH_Count[2] ; +// uint8_t FanDrive_Fail_Low[2] ; +// uint8_t FanDrive_Fail_High[2] ; +// uint8_t TACHTarget_Low[2] ; +// uint8_t TACHTarget_High[2] ; + uint8_t TACHReading_High[2] ; uint8_t TACHReading_Low[2] ; //Lock Register - uint8_t Software_Lock ; +// uint8_t Software_Lock ; //Revision Registers - uint8_t Product_ID ; - uint8_t Manufacturer_ID ; - uint8_t Revision ; +// uint8_t Product_ID ; +// uint8_t Manufacturer_ID ; +// uint8_t Revision ; }D_EMC2302_Register; #define D_EMC2302_Size sizeof(D_EMC2302_Register)//43 @@ -103,12 +103,14 @@ bool Read_WHS_fan_info(WHS_fan_num fan_number); bool Test_WHS_Fan(void); bool init_WHS_fan(void); bool WHS_set_fan_speed(WHS_fan_num fan_number, uint8_t fan_speed); -bool WHS_Read_fan_tach(WHS_fan_num fan_number, uint16_t *fan_tacho); +bool WHS_Read_fan_tach(WHS_fan_num fan_number); +uint16_t WHS_Get_fan_tach(WHS_fan_num fan_number); +void Read_All_WHS_Fans_Tach(void); bool WHS_Read_fan_ALERT(WHS_fan_num fan_number, uint16_t *fan_alert); void Set_All_WHS_Fans(uint8_t speed); //extern FAN_INFO Fan_Info; -extern D_EMC2302_READ D_EMC2302_Read; +//extern D_EMC2302_READ D_EMC2302_Read; //uint8_t D_Fan_PWM_Control(WHS_fan_num Fan_ID, uint8_t PWM); 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 f5c0b0ea9..58f2878ef 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 @@ -65,6 +65,7 @@ bool Test_WHS_max11614() { #define cur_buffr 10 bool status= OK; +/* uint8_t i = 0; uint16_t orf_1_10[cur_buffr] = {0} ; uint16_t orf_2_10[cur_buffr] = {0} ; @@ -172,6 +173,7 @@ bool Test_WHS_max11614() calc_orf_3_20[i] = get_Q(orf_3_20[i] - orf_3_0[i]); calc_vlev1_20[i] = get_Q(vlev1_20[i] - vlev1_0[i]); } +*/ return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a6c1d42f7..195cc65f3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -719,7 +719,7 @@ uint32_t MillisecLowLoop(uint32_t tick) } Trigger_WHS_PT100_Read_All(); Trigger_WHS_MAX11614_Read_allADC(); - + Trigger_WHSReadAllFanTacho (); } if (OneMinute_Tick) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index dbe46db97..e37fe161f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -377,7 +377,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) //Test_Head_fan_Click(); Head_Fan_PWM_Control(0, request->delay & 0xFF); - + Task_sleep(1000); //response.progress = Fan_Click_Info.Product_ID; response.progress = Head_Fan_Tach[0]; @@ -388,7 +388,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request->amount == 0xFAC1) /*&& (request->delay == 0xFAC)*/) //Head Fan control { Head_Fan_PWM_Control(1, request->delay & 0xFF); - + Task_sleep(1000); response.progress = Head_Fan_Tach[1]; response.has_progress = true; } @@ -396,10 +396,12 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if ((request->amount & 0x0000FFF0) == 0xFAC0) //WHS Fan control { uint16_t fan_tacho = 0; + if (WHS_Type == WHS_TYPE_NEW) { Trigger_SetWHSFanSpeed(((request->amount & 0x0000000F)-1) , request->delay & 0x000000FF); - //getWHSFanTacho(((request->amount & 0x0000000F)-1), &fan_tacho); + Task_sleep(1000); + fan_tacho = WHS_Get_fan_tach( (request->amount & 0x0000000F)-1); } response.progress = fan_tacho; response.has_progress = true; diff --git a/Software/Stubs Collection/stubs/newWHS/Fan_speed.cs b/Software/Stubs Collection/stubs/newWHS/Fan_speed.cs index 666e10c4d..045db16fe 100644 --- a/Software/Stubs Collection/stubs/newWHS/Fan_speed.cs +++ b/Software/Stubs Collection/stubs/newWHS/Fan_speed.cs @@ -21,7 +21,7 @@ public void OnExecute(StubManager stubManager) //fan test -var response1 = stubManager.Run("ProgressRequest" ,/*fan1*/0xFAC2, /*speed=*/0x80); // +var response1 = stubManager.Run("ProgressRequest" ,/*fan1*/0xFAC2, /*speed=*/0xFF); // //Thread.Sleep(5000); //Sleep for 10 milli. var response2 = stubManager.Run("ProgressRequest" ,/*fan2*/0xFAC3, /*speed=*/0x80); // //Thread.Sleep(5000); //Sleep for 10 milli. @@ -29,6 +29,8 @@ var response3 = stubManager.Run("ProgressRequest" ,/*fan3*/0xF //Thread.Sleep(5000); //Sleep for 10 milli. var response4 = stubManager.Run("ProgressRequest" ,/*fan4*/0xFAC5, /*speed=*/0x80); // //Thread.Sleep(5000); //Sleep for 10 milli. - - +stubManager.WriteLineHex(response1.Progress,4); +stubManager.WriteLineHex(response2.Progress,4); +stubManager.WriteLineHex(response3.Progress,4); +stubManager.WriteLineHex(response4.Progress,4); } \ No newline at end of file -- cgit v1.3.1