Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r4ed5e33f4bb86748661754208699e66eca184792 -r6158f53357d5d4023df091b6ed1e8f6aa9f30947 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 4ed5e33f4bb86748661754208699e66eca184792) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 6158f53357d5d4023df091b6ed1e8f6aa9f30947) @@ -20,73 +20,80 @@ // Private variables -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance -#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN 16U ///< Primary heater external temperature sensors gain +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 19600U ///< Primary heater external temperature sensors reference resistance +#define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance -#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Conductivity sensor gain -#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Conductivity sensor reference resistance -#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Conductivity sensor zero degree resistance +#define COND_SENSORS_TEMP_SENSOR_GAIN 16U ///< Conductivity sensor gain +#define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Conductivity sensor reference resistance +#define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Conductivity sensor zero degree resistance -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gains -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance -#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN 32U ///< Trimmer heater external temperature sensors gains +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance +#define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance -#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits -#define TEMP_SENSORS_ADC_MAX_COUNT (pow(2,TEMP_SENSORS_ADC_BITS)) ///< Temperature sensors max ADC count +#define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits +#define TEMP_SENSORS_ADC_MAX_COUNT (pow(2,TEMP_SENSORS_ADC_BITS)) ///< Temperature sensors max ADC count -#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A -#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B +#define TEMP_EQUATION_COEFF_A (3.9083 * pow(10,-3)) ///< ADC to temperature conversion coefficient A +#define TEMP_EQUATION_COEFF_B (-5.775 * pow(10,-7)) ///< ADC to temperature conversion coefficient B -#define NUMBER_OF_TEMP_SENSORS 8U ///< Number of temperature sensors -#define NUMBER_OF_ADC_READS 20U ///< Number of ADC reads for moving average calculations +#define MAX_NUM_OF_RAW_ADC_SAMPLES 20U ///< Number of ADC reads for moving average calculations -#define ADC_READ_FIRST_READ_INDEX 0U ///< ADC array first ADC read index -// The last index is calculated by having the number of ADC reads -// plus 1 that is read current index -#define ADC_READ_LAST_READ_INDEX (NUMBER_OF_ADC_READS - 1) ///< ADC array last ADC read index -#define ADC_READ_NEXT_INDEX_INDEX (ADC_READ_LAST_READ_INDEX + 1) ///< ADC array next insertion index -#define ADC_READ_RUNNING_SUM_INDEX (ADC_READ_NEXT_INDEX_INDEX + 1) ///< ARC array running sum index -#define ADC_READ_GAIN_INDEX (ADC_READ_RUNNING_SUM_INDEX + 1) -#define ADC_READ_REF_RESISTANCE_INDEX (ADC_READ_GAIN_INDEX + 1) -#define ADC_READ_0_DEG_RESISTANCE_INDEX (ADC_READ_REF_RESISTANCE_INDEX + 1) +#define ADC_READ_FIRST_READ_INDEX 0U ///< ADC array first ADC read index -#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U +#define ADC_READ_NEXT_INDEX_INDEX 0U ///< ADC array next insertion index +#define ADC_READ_RUNNING_SUM_INDEX 1U ///< ADC array running sum index -#define INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX 0U -#define OUTPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX 1U -#define CONDUCTIVITY_SENSOR_1_TEMP_SENSOR_INDEX 2U -#define CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX 3U -#define OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX 4U -#define INPUT_DIALYSATE_TEMP_SENSOR_INDEX 5U -#define PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX 6U -#define TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX 7U +#define ADC_READ_GAIN_INDEX 0U ///< ADC array gain index +#define ADC_READ_REF_RESISTANCE_INDEX 1U ///< ADC array reference resistances index +#define ADC_READ_0_DEG_RESISTANCE_INDEX 2U ///< ADC array zero degree resistance index +#define MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS 2U ///< Maximum allowed temperature delta between sensors + +#define INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX 0U ///< Input primary heater temperature sensor index +#define OUTPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX 1U ///< Output primary heater temperature sensor index +#define CONDUCTIVITY_SENSOR_1_TEMP_SENSOR_INDEX 2U ///< Conductivity sensor 1 temperature sensor index +#define CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX 3U ///< Conductivity sensor 2 temperature sensor index +#define OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX 4U ///< Output redundancy temperature sensor index +#define INPUT_DIALYSATE_TEMP_SENSOR_INDEX 5U ///< Input dialysate temperature sensor index +#define PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX 6U ///< Primary heater internal temperature sensor index +#define TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX 7U ///< Trimmer heater internal temperature sensor index + /// Temperature sensor self test states typedef enum tempSensors_Self_Test_States { - TEMPSENSORS_SELF_TEST_START = 0, - TEMPSENSORS_SELF_TEST_ADC_CHECK, - TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK, - TEMPSENSORS_SELF_TEST_COMPLETE, - NUM_OF_TEMPSENSORS_SELF_TEST_STATES + TEMPSENSORS_SELF_TEST_START = 0, ///< Temperature sensors self test start + TEMPSENSORS_SELF_TEST_ADC_CHECK, ///< Temperature sensors self ADC check + TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK, ///< Temperature sensors self test consistency check + TEMPSENSORS_SELF_TEST_COMPLETE, ///< Temperature sensors self test complete + NUM_OF_TEMPSENSORS_SELF_TEST_STATES ///< Total number of self test states } TEMPSENSORS_SELF_TEST_STATES_T; /// Temperature sensor exec states typedef enum tempSensors_Exec_States { - TEMPSENSORS_EXEC_STATE_START = 0, - TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES, - NUM_OF_TEMPSENSORS_EXEC_STATES, + TEMPSENSORS_EXEC_STATE_START = 0, ///< Temperature sensors exec start + TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES, ///< Temperature sensors exec get ADC values + NUM_OF_TEMPSENSORS_EXEC_STATES, ///< Total number of exec states } TEMPSENSORS_EXEC_STATES_T; -static SELF_TEST_STATUS_T tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; ///< Self test result of the TemperatureSensors module -static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; ///< TemperatureSensor self test state -static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; ///< TemperatureSensor exec state -static U32 tempSensorsADCReads [ NUMBER_OF_TEMP_SENSORS ] [ NUMBER_OF_ADC_READS + 5 ] = {0}; ///< Number of ADC reads + the running sum -static F32 tempSensorsAvgADCValues [ NUMBER_OF_TEMP_SENSORS ] = {0}; ///< Temperature sensors averaged ADC values -static U32 initialADCReadIndex = 0; ///< Initial ADC read index until the array if filled up for the first time +static SELF_TEST_STATUS_T tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; ///< Self test result of the TemperatureSensors module +static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; ///< TemperatureSensor self test state +static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; ///< TemperatureSensor exec state +static U32 rawADCReads [ NUM_OF_TEMPERATURE_SENSORS ] [ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Number of ADC reads + the running sum + +static U32 runningSumAndIndex [ NUM_OF_TEMPERATURE_SENSORS ] [ 2 ]; +static U32 tempSensorsConstants [ NUM_OF_TEMPERATURE_SENSORS ] [ 3 ]; +static F32 avgADCReads [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors averaged ADC values + + +// Samples array +// constants array +// running sum and index array +static U32 sampleCount = 0; ///< Initial ADC read index until the array if filled up for the first time + // Private functions prototypes static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ); @@ -116,15 +123,28 @@ tempSensorsSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; - initialADCReadIndex = 0; + sampleCount = 0; + // Initializing the tempSensorADCReads with the reference values - for ( i = 0; i < 3; i++ ) + for ( i = 0; i < 2; i++ ) { - tempSensorsADCReads [ i ] [ ADC_READ_GAIN_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensorsADCReads [ i ] [ ADC_READ_REF_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensorsADCReads [ i ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensorsConstants [ i ] [ ADC_READ_GAIN_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensorsConstants [ i ] [ ADC_READ_REF_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensorsConstants [ i ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; } + for ( i = 2; i < 4; i++ ) + { + tempSensorsConstants [ i ] [ ADC_READ_GAIN_INDEX ] = COND_SENSORS_TEMP_SENSOR_GAIN; + tempSensorsConstants [ i ] [ ADC_READ_REF_RESISTANCE_INDEX ] = COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE; + tempSensorsConstants [ i ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE; + } + for ( i = 4; i < 6; i++ ) + { + tempSensorsConstants [ i ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensorsConstants [ i ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensorsConstants [ i ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + } /*tempSensorsADCReads [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; tempSensorsADCReads [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; tempSensorsADCReads [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; @@ -139,23 +159,23 @@ tempSensorsADCReads [ CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN; tempSensorsADCReads [ CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensorsADCReads [ CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE;*/ + tempSensorsADCReads [ CONDUCTIVITY_SENSOR_2_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensorsADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensorsADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensorsADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensorsRawADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensorsRawADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensorsRawADCReads [ OUTPUT_REDUNDANCY_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensorsRawADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; + tempSensorsRawADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; + tempSensorsRawADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensorsADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = 0; - tempSensorsADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = 0; - tempSensorsADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = 0; + tempSensorsRawADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = 0; + tempSensorsRawADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = 0; + tempSensorsRawADCReads [ PRIMARY_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = 0; - tempSensorsADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = 0; - tempSensorsADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = 0; - tempSensorsADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = 0; + tempSensorsRawADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = 0; + tempSensorsRawADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = 0; + tempSensorsRawADCReads [ TRIMMER_HEATER_INTERNAL_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = 0;*/ } /************************************************************************* * @brief execTemperatureSensorsSelfTest @@ -236,7 +256,7 @@ F32 getTPiTemperatureValue ( void ) { - F32 adc = tempSensorsAvgADCValues [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ]; + F32 adc = avgADCReads [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ]; F32 temperature = getADC2TempConversion ( adc, PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN, PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE, PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE ); @@ -280,30 +300,28 @@ *************************************************************************/ static void processADCRead ( U32 sensorIndex, U32 adc ) { - U32 sampleCount; - U32 index = tempSensorsADCReads [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ]; - U32 runningSum = tempSensorsADCReads [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ]; - U32 indexValue = tempSensorsADCReads [ sensorIndex ] [ index ]; - U32 nextIndex = INC_WRAP( index, ADC_READ_FIRST_READ_INDEX, ADC_READ_LAST_READ_INDEX ); + U32 index = runningSumAndIndex [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ]; + U32 runningSum = runningSumAndIndex [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ]; + U32 indexValue = rawADCReads [ sensorIndex ] [ index ]; + U32 nextIndex = INC_WRAP( index, ADC_READ_FIRST_READ_INDEX, MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ); runningSum = runningSum - indexValue + adc; - tempSensorsADCReads [ sensorIndex ] [ index ] = adc; - tempSensorsADCReads [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ] = runningSum; - tempSensorsADCReads [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ] = nextIndex; + rawADCReads [ sensorIndex ] [ index ] = adc; + runningSumAndIndex [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ] = nextIndex; + runningSumAndIndex [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ] = runningSum; - if ( initialADCReadIndex < ADC_READ_LAST_READ_INDEX ) + if ( sampleCount < MAX_NUM_OF_RAW_ADC_SAMPLES ) { - sampleCount = initialADCReadIndex + 1; - initialADCReadIndex++; + sampleCount++; } else { - sampleCount = NUMBER_OF_ADC_READS; + sampleCount = MAX_NUM_OF_RAW_ADC_SAMPLES; } // TODO Remove this code FOR TESTING F32 test = runningSum / sampleCount; // TODO Remove this code FOR TESTING - tempSensorsAvgADCValues [ sensorIndex ] = runningSum / sampleCount; + avgADCReads [ sensorIndex ] = runningSum / sampleCount; } /************************************************************************* * @brief handleSelfTestStart @@ -317,15 +335,7 @@ *************************************************************************/ static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart ( void ) { - TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_START; - - // Check if the ADC array has been filled at least once - if ( initialADCReadIndex >= ADC_READ_LAST_READ_INDEX ) - { - state = TEMPSENSORS_SELF_TEST_ADC_CHECK; - } - - return state; + return TEMPSENSORS_SELF_TEST_START; } /************************************************************************* * @brief handleSelfTestADCCheck @@ -343,9 +353,9 @@ TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK; U08 i; - for ( i = 0; i < sizeof(tempSensorsAvgADCValues); i++ ) + for ( i = 0; i < sizeof(avgADCReads); i++ ) { - U32 avgADC = tempSensorsAvgADCValues [ i ]; + U32 avgADC = avgADCReads [ i ]; if ( avgADC > TEMP_SENSORS_ADC_MAX_COUNT ) { @@ -367,38 +377,31 @@ *************************************************************************/ static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestConsistencyCheck ( void ) { + //TODO Consider edge cases for the consistency check TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_COMPLETE; U32 largestDelta; U08 i, j, k; - F32 tempBuffer [ NUMBER_OF_TEMP_SENSORS ]; + F32 tempBuffer [ NUM_OF_TEMPERATURE_SENSORS ]; F32 temperature; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_GAIN_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_GAIN; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_REF_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE; - tempSensorsADCReads [ INPUT_DIALYSATE_TEMP_SENSOR_INDEX ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE; - for ( k = 0; k < sizeof(tempBuffer); k++) { - temperature = getADC2TempConversion ( tempSensorsAvgADCValues [ k ], - tempSensorsADCReads [ k ] [ ADC_READ_GAIN_INDEX ], - tempSensorsADCReads [ k ] [ ADC_READ_REF_RESISTANCE_INDEX ], - tempSensorsADCReads [ k ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] ); + temperature = getADC2TempConversion ( avgADCReads [ k ], + tempSensorsConstants [ k ] [ ADC_READ_GAIN_INDEX ], + tempSensorsConstants [ k ] [ ADC_READ_REF_RESISTANCE_INDEX ], + tempSensorsConstants [ k ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] ); tempBuffer [ k ] = temperature; } - //F32 adc = tempSensorsAvgADCValues [ INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX ]; - //F32 temperature = getADC2TempConversion ( adc, PRIMARY_HEATER_EXT_TEMP_SENSORS_GAIN, - // PRIMARY_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE, - // PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE ); - for ( i = 0; i < sizeof(tempSensorsAvgADCValues); i++ ) + for ( i = 0; i < sizeof(tempBuffer); i++ ) { - for ( j = 0; j < sizeof(tempSensorsAvgADCValues); j++ ) + for ( j = 0; j < sizeof(tempBuffer); j++ ) { - if ( i != j) + if ( i != j ) { - largestDelta = MAX( largestDelta, fabs(tempSensorsAvgADCValues [ i ] - tempSensorsAvgADCValues [ j ]) ); + largestDelta = MAX( largestDelta, fabs(tempBuffer [ i ] - tempBuffer [ j ]) ); } if ( largestDelta > MAX_ALLOWED_TEMP_DELTA_BETWEEN_SENSORS ) { @@ -451,6 +454,14 @@ { TEMPSENSORS_EXEC_STATES_T state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; + // Check the read count for a change before inserting + // Need to remember the fpga counter and if it has not changed increment another counter and + // zero it if it changed. if it is above a certain number throw fault + // error counter from fpga same as above remember, if it is incremented: + // + + // Look at the error counter and the specific error flag to make sure the error is a temp sensor + // Add a byte array to have bits for each sensor to find out exactly what sensor failed processADCRead( INPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX, getFPGATPiTemp() ); processADCRead( OUTPUT_PRIMARY_HEATER_TEMP_SENSOR_INDEX, getFPGATPoTemp() ); // TODO Updated the get functions from FPGA