BOOL WEIGHT_ReadWeight(WORD _Port, long * _Weight)
{
BYTE i, j, flag;
DWORD temp1, temp2;
DWORD_VAL dwvValue;
static LONG_VAL lWeight;
static long lTempWeight, lTempWeight2;
DWORD dwTempBuff[6];
#if !defined(OCWB_GW)
if(!SPI_AD77xx_EndConversion()) return FALSE;
#endif
if(_Port == SPI_AD77xx_PORT_1) lTempWeight = Weight[0].Value;
#if defined(SPI_AD77xx_PORT_2)
else if(_Port == SPI_AD77xx_PORT_2 && (WEIGHT_NumberActive == 2 || WEIGHT_NumberActive == 3)) lTempWeight = Weight[1].Value;
#endif
#if defined(SPI_AD77xx_PORT_3)
else if(_Port == SPI_AD77xx_PORT_3 && WEIGHT_NumberActive == 3) lTempWeight = Weight[2].Value;
#endif
else return FALSE;
j = 100;
while(j++){
#if !defined(OCWB_GW)
for(i=0; i<10; i++){ //nova konverzia
if(SPI_AD77xx_ReadData(_Port, &dwvValue.Val)) break;
DelayMs(100);
}
if(i == 10) return FALSE;
#else
for(i=0; i<6; i++){
if(HX711_ReadData(_Port, &dwvValue.Val)){
dwTempBuff[i] = dwvValue.Val;
DelayMs(5);
}
else return FALSE;
}
dwvValue.Val = (dwTempBuff[0] + dwTempBuff[1] + dwTempBuff[2] + dwTempBuff[3] + dwTempBuff[4] + dwTempBuff[5])/6;
#endif
if(_Port == SPI_AD77xx_PORT_1){
#if defined OCWB_GW
if(j == 101) temp1 = dwvValue.Val;
else if(j == 102) temp2 = dwvValue.Val;
if(dwvValue.Val & 0x800000) flag = 1;
else flag = 0;
dwvValue.Val = (DWORD)((long)(dwvValue.Val&0xff7fffff) + Weight[0].CalibZero);
if(flag && !(dwvValue.Val & 0x800000)) dwvValue.Val = 0;
else if(!flag && (dwvValue.Val & 0x800000)) dwvValue.Val = 0;
dwvValue.Val = dwvValue.Val&0xff7fffff;
#endif
if(CtmuTemperature[2].Error) lWeight.Val = Weight[0].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[0].CalibTemp - lWeight.Val)/100.0 * Weight[0].TempConst));
lWeight.Val = (long) (((double) dwvValue.Val * 1000.0) / (double)Weight[0].Calib) + lTempWeight2 ; //1g
if((lWeight.Val - 10) < lTempWeight2) lWeight.Val = 0;
lWeight.Val = lWeight.Val - Weight[0].Tare;
if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){
lTempWeight = lWeight.Val;
continue;
}
Weight[0].Value = lWeight.Val;
WEIGHT_Flag = TRUE;
// if(Weight[0].Value > Weight[0].Max) Weight[0].Value = Weight[0].Max;
*_Weight = Weight[0].Value;
break;
}
#if defined(SPI_AD77xx_PORT_2)
else if(_Port == SPI_AD77xx_PORT_2){
#if defined OCWB_GW
if(dwvValue.Val & 0x800000) flag = 1;
else flag = 0;
dwvValue.Val = (DWORD)((long)(dwvValue.Val&0xff7fffff) + Weight[1].CalibZero);
if(flag && !(dwvValue.Val & 0x800000)) dwvValue.Val = 0;
else if(!flag && (dwvValue.Val & 0x800000)) dwvValue.Val = 0;
dwvValue.Val = dwvValue.Val&0xff7fffff;
#endif
if(CtmuTemperature[2].Error) lWeight.Val = Weight[1].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[1].CalibTemp - lWeight.Val)/100.0 * Weight[1].TempConst));
lWeight.Val = (long) (((float) dwvValue.Val * 1000.0) / Weight[1].Calib) - Weight[1].Tare + lTempWeight2 ; //1g
if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){
lTempWeight = lWeight.Val;
continue;
}
Weight[1].Value = lWeight.Val;
WEIGHT_Flag = TRUE;
// if(Weight[1].Value > Weight[1].Max) Weight[1].Value = Weight[1].Max;
*_Weight = Weight[1].Value;
break;
}
#endif
#if defined(SPI_AD77xx_PORT_3)
else if(_Port == SPI_AD77xx_PORT_3){
if(CtmuTemperature[2].Error) lWeight.Val = Weight[2].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[2].CalibTemp - lWeight.Val)/100.0 * Weight[2].TempConst));
lWeight.Val = (long) (((float) dwvValue.Val * 1000.0) / Weight[2].Calib) - Weight[2].Tare + lTempWeight2 ; //1g
if(lTempWeight < (lWeight.Val - 30L) || lTempWeight > (lWeight.Val + 30L)){
lTempWeight = lWeight.Val;
continue;
}
Weight[2].Value = lWeight.Val;
WEIGHT_Flag = TRUE;
if(Weight[2].Value > Weight[2].Max) Weight[2].Value = Weight[2].Max;
*_Weight = Weight[2].Value;
break;
}
#endif
}
if(j == 0) return FALSE;
#if defined SYSTEM_DEBUG
sprintf(bTemp, "\r\nsegments = %ld %ld\r\n", temp1, temp2);
UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp));
#endif
return TRUE;
}