This is an old revision of the document!


Telemetry decoding

Describes how to decode data from recieved telemetry. This includes evaluation of temperature, pressure and humidity from measured values or GPS coordinates.

FRAME_PAYLOAD_DATA structure

Each frame contains payload consisting of subframes with varying length.

SUBFRAME structure

offset (B) lenght (B) name content
0 1 SUBFRAME_TYPE Type of subframe ?
1 1 SUBFRAME_LEN Length of subframe payload
2 2*SUBFRAME_LEN SUBFRAME_PAYLOAD subframe payload
2*SUBFRAME_LEN+2 2 SUBFRAME_CRC CRC 16 of subframe payload, polynom = 0x11021

Known subframe types

SUBFRAME_TYPE description
0x65 Calibration and Configuration fragment
0x69 Measurement data
0x67 GPS data
0x68 typ of content not indentified
0xff padding ?

Calibration subframe payload (0x65)

expected payload length: 32

offset (B) lenght (B) name content description
0 2 CALIB_FR_NUM uint16 frame number, (starts from 1)
2 10 CALIB_ID string 0x20 0x20 + sonde ID (same as on cover)
12 1 CALIB_STATE_0 uint8 0 - OK; 0x08/0x0A - battery low / battery low, powe off countdown running?
13 1 CALIB_STATE_1 uint8 see table bellow
14 1 CALIB_UNKNOWN_0 0x00 ???
15 1 CALIB_FRAG_NUM unit8 callibration and configuration fragment number
16 16 CALIB_FRAG_DATA bytes calibration and configuration data fragment

STATE_1

TODO: verification needed, possible documentation bug

bit offset description
(LSB) 0 start detected (set at the same time as bit 5)
1 ???
2 humidity sensor heating: 0 = off, 1 = on
3 humidity sensor for measurement: 0 = U1 (CH2), 1 = U2 (CH3)
4 set to 1 when current drown from battery is increased by 50mA
5 start detected (set at the same time as bit 1)
6 ???
(MSB) 7 ???

Measurement subframe payload (0x69)

expected payload length: 24

offset (B) lenght (B) content name description
0 3 int24 MEAS_T Temperature sensor (wire at end of stick)
3 3 int24 MEAS_U1 Humidity (remoter to sonde)
6 3 int24 MEAS_U2 Humidity (closer to sonde)
9 3 int24 MEAS_REF1 reference upper bound, increase with temperature (or vice versa, TODO)
12 3 int24 MEAS_REF2 reference upper bound, decrease with temperature (or vice versa, TODO)
15 3 int24 MEAS_P Pressure
18 3 int24 MEAS_REF3 reference lower bound
21 3 int24 MEAS_REF4 reference lower bound

Humidity value equations:

  • ref_lo = (MEAS_REF3 + MEAS_REF4) / 2
  • ref_hi1 = MEAS_REF1 - ref_lo
  • ref_hi2 = MEAS_REF2 - ref_lo
  • U1_rel = ref_hi2 / (MEAS_CH1 - ref_lo)
  • U2_rel = ref_hi2 / (MEAS_CH2 - ref_lo)
  • U1 = cal[40] + cal[41]*U1_rel + cal[42]*U1_rel^2 + cal[43]*U1_rel^3 + cal[44]*U1_rel^4 + cal[45]*U1_rel^5
  • U2 = cal[50] + cal[51]*U2_rel + cal[52]*U2_rel^2 + cal[53]*U2_rel^3 + cal[54]*U2_rel^4 + cal[55]*U2_rel^5
  • U = max(U1, U2)

Similar set of equations, but with some aditional tricks should work for P, and T.

GPS subframe payload (0x67)

expected payload length: 122

offset (B) lenght (B) content description
0 4 GPS_TIME (int32) GPS time - ms from week start
4 2 GPS_BLOB_0 ???, 4*4 bity
6 8 GPS_PRN PRN for each tracked satelite
14 12 GPS_STAT_1 signal strength, fix status …
26 88 GPS_DATA_1 doppler, pseudorange, …

GPS_PRN

List of pseudorange sequence number for each recieving satelite, 0 == no satelite.

12*5 bit - PRN number (x - unused ?)

11100000 x2222211 44433333 x5555544 77766666 x8888877 BBBAAAAA xCCCCCBB

GPS_STAT_1

GPS satelite channel state.

offset (b) length (b) description
0 4 (int4) signal strength or fix quallity, 0xf == NaN / no signal
4 1 time fix - set to 1 when time is succesfully obtained from subframe
5 1 pseudorange fix ??? - pseudorange fix is correlated to time ?
6 1 pseudorange fix ??? (simple ?)
7 1 doppler fix - some signal found at certain frequency

GPS_DATA_1

offset (B) length (B) description
0 4 int32/fract32 ? - in range ←2e6, 0x1400000 ), 0x7FFFxxxx == NAN
4 3 int24/fract24 ? - some number, might be signed, not sure
7 1 ??? - number, min/max: ←38, 39> ussually -5..10

Unknown subframe payload (0x68)

expected payload length: 10

No clue what this means.

offset (B) length (B) description
0 10 ???

ussual content:

0x03 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Padding subframe (0xff)

expected payload length: 4

This type of frame probably identifies only padding

  • no CRC?
  • constant pattern of repeating (0x02 0x00) ?

Configuration and calibration

Calibration data are composed from fragments send in first subframe. Calibration data block is 512B long. Content is identical with data from EEPROM.

- there should be somewhere date/time (GPS send only seconds offset from start of week)

offset (B) lenght (B) content description
0 2 ??? ??? (checksum?)
2 2 unit16 downlik frequency f = (400000 + value*2560) kHz, upper limit is around 423MHz (value = 0x08FC)
4 2 uint16 always 0xffff - kill timmer ?
6 2 int16 always 0x0100 - set transmit power to full ?
???
22 10 string probe ID (same as printed on conver, starts with 0x20 0x20)
???
64 5*x CALIB_COEFF calibration coefficients table

CALIB_COEFF

Consist of sequence of repeated fields with following structure:

offset (B) lenght (B) context description
0 1 uint8 calibration constant index
4 4 float32 calibration constant value

Example of calibration data

coefficient index row/col (x) 0 1 2 3 4 5 6 7
1x -366.026 -43.9063 393.234 -131.314 25.6268 -2.02341 0.96
2x -803.34 363.815 317.784 127.429 0.96
3x -187.802 89.6416 -26.9122 9.15022 -1.45707 0.0868068 0.849488
4x (humidity 1) -1223.17 3548.18 -2646.42 588.217 0.96
5x (humidity 2) -1198.04 3497.31 -2611.15 580.153 0.96
6x 0.0318379 0.0374458 -0.0433925 0.00630527
7x -0.000132316 0.000414854 -0.000402439 6.31402e-05
8x -2.04505e-06 1.5662e-067.05777e-07
11x 0.5227 -0.0284 0.000286 8.97e-07 -1.26e-09
12x 1.07573 -0.204 0.009009 -5.83e-05 -1.04e-06
13x 0.5227 -0.0284 0.000286 8.97e-07 -1.26e-09
14x 1.07573 -0.204 0.009009 -5.83e-05 -1.04e-06
15x 4.75029e-06-5.47494e-08 4.851e-10 -1.736e-12 0.7
16x 0.7
  • Coefficients at rows 1Nx are never chenge.
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki