Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r61be28695d75fc3ba795be4f4f77e435dde1dd11 -r0edfb69c6bfe5bcac0dcf032939521be32aa50df --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 61be28695d75fc3ba795be4f4f77e435dde1dd11) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 0edfb69c6bfe5bcac0dcf032939521be32aa50df) @@ -96,6 +96,8 @@ #define SYRINGE_PUMP_RATE_CHECK_MARGIN 0.05 ///< 5 pct margin on commanded vs. measured rate check. #define SYRINGE_PUMP_VOLUME_CHECK_MARGIN 0.05 ///< 5 pct margin on commanded vs. encoder based volume check. +#define SYRINGE_PUMP_ADC_READ_PERSISTENCE ( 100 / TASK_PRIORITY_INTERVAL ) ///< Syringe pump ADC stale read alarm persistence time (100 ms). + // Bit definitions for syringe pump control register #define SYRINGE_PUMP_CONTROL_SLEEP_OFF 0x40 ///< Syringe pump control register bit for sleep mode (active low). #define SYRINGE_PUMP_CONTROL_NOT_RESET 0x20 ///< Syringe pump control register bit for resetting stepper motor (active low). @@ -201,6 +203,7 @@ static F32 syringePumpDACVref; ///< DAC Vref setting for force sensor. static U08 lastSyringePumpADCReadCtr; ///< Remember last ADC read counter to check new reads are fresh. +static U32 syringePumpADCReadErrorCtr; ///< Stale ADC read error persistence timer counter. static SYRINGE_PUMP_SELF_TEST_STATE_T syringePumpSelfTestState; ///< Current syringe pump self-test state. static U32 syringePumpSelfTestTimerCount; ///< Timer counter for syringe pump self-test. @@ -266,6 +269,7 @@ syringePumpPrimeCompleted = FALSE; lastSyringePumpADCReadCtr = 0; + syringePumpADCReadErrorCtr = 0; // Reset request flags resetSyringePumpRequestFlags(); @@ -832,10 +836,17 @@ { #ifndef USING_DEBUGGER // Check ADC read is fresh (takes FPGA a while to configure ADC so don't check until after init/POST mode - if ( ( getCurrentOperationMode() > MODE_INIT ) && ( lastSyringePumpADCReadCtr == adcReadCtr ) ) // TODO - add persistence or time window + if ( ( getCurrentOperationMode() > MODE_INIT ) && ( lastSyringePumpADCReadCtr == adcReadCtr ) ) { - activateAlarmNoData( ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR ); + if ( ++syringePumpADCReadErrorCtr > SYRINGE_PUMP_ADC_READ_PERSISTENCE ) + { + activateAlarmNoData( ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR ); + } } + else + { + syringePumpADCReadErrorCtr = 0; + } #endif lastSyringePumpADCReadCtr = adcReadCtr; Index: firmware/App/HDCommon.h =================================================================== diff -u -rbe0efb61904d152fd526777b4b367fcad3f39314 -r0edfb69c6bfe5bcac0dcf032939521be32aa50df --- firmware/App/HDCommon.h (.../HDCommon.h) (revision be0efb61904d152fd526777b4b367fcad3f39314) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 0edfb69c6bfe5bcac0dcf032939521be32aa50df) @@ -25,7 +25,7 @@ #define HD_VERSION_MAJOR 0 #define HD_VERSION_MINOR 5 #define HD_VERSION_MICRO 0 -#define HD_VERSION_BUILD 9018 +#define HD_VERSION_BUILD 9024 // ********** development build switches ********** @@ -50,8 +50,8 @@ #define DISABLE_PUMP_FLOW_CHECKS 1 // Do not error on HD pump flow checks #define DISABLE_PUMP_SPEED_CHECKS 1 // Do not error on HD pump speed checks #define DISABLE_PUMP_DIRECTION_CHECKS 1 // Do not error on HD pump direction checks - #define DISABLE_SYRINGE_PUMP 1 // Disable syringe pump functionality -// #define ALWAYS_ALLOW_SYRINGE_PUMP_CMDS 1 // Allow syringe pump commands at any time except when pump is busy +// #define DISABLE_SYRINGE_PUMP 1 // Disable syringe pump functionality + #define ALWAYS_ALLOW_SYRINGE_PUMP_CMDS 1 // Allow syringe pump commands at any time except when pump is busy #define DISABLE_PRESSURE_CHECKS 1 // Do not error on HD pressure checks // #define DISABLE_UF_ALARMS 1 // Do not error on HD ultrafiltration checks #define DISABLE_VALVE_ALARMS 1 // Do not error on HD valve position