diff --git a/demod/mod/mXXmod.c b/demod/mod/mXXmod.c index 072a7eb..2bd2b24 100644 --- a/demod/mod/mXXmod.c +++ b/demod/mod/mXXmod.c @@ -77,6 +77,7 @@ dduudduudduudduu duduudduuduudduu ddududuudduduudd uduuddududududud uudduduuddu //"0111011010011111"; // M10: 76 9F , w/ aux-data //"0110010001001001"; // M10-dop: 64 49 09 //"0110010010101111"; // M10+: 64 AF w/ gtop-GPS + //"0100010100100000"; // M20: 45 20 (baud=9600) static char rawheader[] = "10011001100110010100110010011001"; #define FRAME_LEN (100+1) // 0x64+1 @@ -618,7 +619,9 @@ static float get_Temp(gpx_t *gpx) { x = (4095.0-ADC_RT)/ADC_RT; // (Vcc-Vout)/Vout = Vcc/Vout - 1 R = Rs[scT] /( x - Rs[scT]/Rp[scT] ); - if (R > 0) T = 1/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); + if (R > 0) T = 1.0/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); + + if (T > 333.15) T = 0; // T > 60C invalid return T - 273.15; // Celsius } @@ -641,7 +644,7 @@ static float get_Tntc2(gpx_t *gpx) { ADC_ntc0 = (gpx->frame_bytes[0x07] << 8) | gpx->frame_bytes[0x06]; // M10: 0x40,0x3F x = (4095.0 - ADC_ntc0)/ADC_ntc0; // (Vcc-Vout)/Vout R = Rs / x; - if (R > 0) T = 1/(1/T25 + 1/b * log(R/R25)); + if (R > 0) T = 1.0/(1.0/T25 + 1.0/b * log(R/R25)); //if (R > 0) T = 1/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); return T - 273.15; @@ -730,8 +733,8 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) { get_SN(gpx); if (gpx->option.ptu && csOK) { - gpx->T = get_Temp(gpx); // temperature - gpx->TH = get_Tntc2(gpx); // rel. humidity sensor temperature + gpx->T = get_Temp(gpx); // temperature + gpx->TH = get_Tntc2(gpx); // rel. humidity sensor temperature gpx->RH = get_RH(gpx); // relative humidity gpx->P = get_P(gpx); // (optional) pressure } @@ -945,7 +948,7 @@ static int print_frame(gpx_t *gpx, int pos, int b2B) { } fprintf(stdout, "\n"); } - if (gpx->option.slt /*&& gpx->option.jsn*/) { + if (gpx->option.slt /*&& gpx->option.jsn && gpx->frame_bytes[1] != 0x49*/) { print_pos(gpx, bc, cs1 == cs2); } } @@ -956,6 +959,7 @@ static int print_frame(gpx_t *gpx, int pos, int b2B) { byte = gpx->frame_bytes[i]; fprintf(stdout, "%02x", byte); } + if (cs1 == cs2) fprintf(stdout, " [OK]"); else fprintf(stdout, " [NO]"); fprintf(stdout, "\n"); } } diff --git a/demod/multi/m20base.c b/demod/multi/m20base.c index 52f7d7f..9a4100d 100644 --- a/demod/multi/m20base.c +++ b/demod/multi/m20base.c @@ -601,7 +601,9 @@ static float get_Temp(gpx_t *gpx) { x = (4095.0-ADC_RT)/ADC_RT; // (Vcc-Vout)/Vout = Vcc/Vout - 1 R = Rs[scT] /( x - Rs[scT]/Rp[scT] ); - if (R > 0) T = 1/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); + if (R > 0) T = 1.0/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); + + if (T > 333.15) T = 0; // T > 60C invalid return T - 273.15; // Celsius } @@ -624,7 +626,7 @@ static float get_Tntc2(gpx_t *gpx) { ADC_ntc0 = (gpx->frame_bytes[0x07] << 8) | gpx->frame_bytes[0x06]; // M10: 0x40,0x3F x = (4095.0 - ADC_ntc0)/ADC_ntc0; // (Vcc-Vout)/Vout R = Rs / x; - if (R > 0) T = 1/(1/T25 + 1/b * log(R/R25)); + if (R > 0) T = 1.0/(1.0/T25 + 1.0/b * log(R/R25)); //if (R > 0) T = 1/( p0 + p1*log(R) + p2*log(R)*log(R) + p3*log(R)*log(R)*log(R) ); return T - 273.15; @@ -713,8 +715,8 @@ static int print_pos(gpx_t *gpx, int bcOK, int csOK) { get_SN(gpx); if (gpx->option.ptu && csOK) { - gpx->T = get_Temp(gpx); // temperature - gpx->TH = get_Tntc2(gpx); // rel. humidity sensor temperature + gpx->T = get_Temp(gpx); // temperature + gpx->TH = get_Tntc2(gpx); // rel. humidity sensor temperature gpx->RH = get_RH(gpx); // relative humidity gpx->P = get_P(gpx); // (optional) pressure }