Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rc0700a4503f28288f16070634bb87f4eccb2568c -r9c310aee18d85fe28b2f096cd3d61bd8df17937f --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision c0700a4503f28288f16070634bb87f4eccb2568c) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 9c310aee18d85fe28b2f096cd3d61bd8df17937f) @@ -275,9 +275,23 @@ *************************************************************************/ void tareLoadCell( LOAD_CELL_ID_T loadCellID ) { + BOOL isWeightOutOfRange = FALSE; + F32 deltaWeight = 0.0; + F32 weight = getLoadCellSmallFilteredWeight( loadCellID ); - BOOL isWeightOutOfRange = ( weight > ( EMPTY_RESERVOIR_WEIGHT_GRAMS + MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS ) ? TRUE : FALSE ); + // Check if the load cell is being tared for the first time + if ( fabs(loadcells[ loadCellID ].autoCalOffset) < NEARLY_ZERO ) + { + deltaWeight = fabs(weight - ( EMPTY_RESERVOIR_WEIGHT_GRAMS + MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS )); + isWeightOutOfRange = ( weight > deltaWeight ? TRUE : FALSE ); + } + else + { + deltaWeight = fabs(weight - MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS ); + isWeightOutOfRange = ( weight > deltaWeight ? TRUE : FALSE ); + } + if ( FALSE == isWeightOutOfRange ) { // Add old auto calibration offset to get back to actual weight value