M20: T>60C invalid

master
Zilog80 2023-03-10 23:36:37 +01:00
rodzic ad9fb02d01
commit 5a74af9715
2 zmienionych plików z 15 dodań i 9 usunięć

Wyświetl plik

@ -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");
}
}

Wyświetl plik

@ -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
}