Directly patch the parameters in the PPSS entry that triggeres the OP
heater once per minute.
Due to the nonlinearity of the regulator we can alway roughly assume we
heat with DC=70%. We need to adjust the setpoint with a correspondig
offset. This offset depends on the gain. The default gain is
`shift=0`. The DC will be ADC-setpoint. A shift of 1, 2, or 3 will
reduce the DC by a power of two, i.e.,
DC = (ADC - setpoint) >> shift
This patch keeps shift=0.
The target temperatures are
HET/EPT1: -6.0°C
HET/EPT2: -0.5°C
Usage:
(stephan)blaulicht:~/solo/solo_config$ ./solopath.py
SOLOPATH> from solo.configurations.hetept1.v0009.hetept_config_opheater_patch4 import *
…
SOLOPATH> main()
…
SOLOPATH> msg=solo.solomsgclass.msg_print()
SOLOPATH> patch1.send(msg)
msg(0x000f, 3, 0x0000093500090004)
Temp SPY: -6.0°C -3.2°C -8.8°C
Temp SPY: -6.0°C -3.3°C -5.9°C
Temp SPY: -6.0°C -3.2°C -6.0°C
Temp SPY: -6.0°C -3.2°C -6.0°C
Temp SPY: -6.0°C -3.2°C -6.0°C
msg(0x268c, 3, 0x0000af1f0000c002)
msg(0x268d, 3, 0x007270e009f99000)
OP heater setpoint: -6 C = 2553 ADC
msg(0x2697, 1, 0x00000000000000ff)
msg(0x2696, 3, 0x0003e8010000413c)
SOLOPATH> patch1.OH_SHIFT=1
SOLOPATH> patch1.send(msg)
msg(0x000f, 3, 0x0000093500090004)
Temp SPY: -6.0°C -0.2°C -11.8°C
Temp SPY: -6.0°C -0.5°C -5.7°C
Temp SPY: -6.0°C -0.5°C -6.0°C
Temp SPY: -6.0°C -0.5°C -6.0°C
Temp SPY: -6.0°C -0.5°C -6.0°C
msg(0x268c, 3, 0x0000af1f0000c002)
msg(0x268d, 3, 0x007270e019739000)
OP heater setpoint: -6 C = 2419 ADC
msg(0x2697, 1, 0x00000000000000ff)
msg(0x2696, 3, 0x0003e8010000413c)
The multi hit counts were part of nominal in solo_data(). They got lost
with version 8, when all DPS was reimplemented except for Low Latency.
This commit removes all old data products in solo_data except for low
latency. The multi hit counts are kept and appended to LL.
The version number is bumped to 9.1.
solo.l1l2.l2trigger.set() changes only the given parameters. It does not
imply a .reset(). Those lines were a NOP. We only need to clear none=(),
to prevent any anticoincidences.
The STEP unit EEPROM contains v6 in page 0x00000/0x60000. The ICU
config memory contains v7 in page 0x70000 and v8 in 0x60000. We plan to
write v8 into page 0x10000/0x70000 to not overwrite v6. v7 was never
written to EEPROM. At ICU reboot (after EGAM), the v8 config will the
appear in 0x70000.
This patch creates the STEP config compiled for 0x70000.
A preliminary xml to burn it into EEPORM is included. Missing from that
xml is the restart of the unit after burn.
The SOC parses our telemetry for index entries and feeds their data
model with assumptions about the resulting data rate. This patch
restores the assignment of index entries to relative data rate.
[2] Full nominal config with 10s cadence
[6] patch to 1s cadence
[7] == [2]
Calibration of ADC readings `HIT` to energy `E` works like this
```
E = MULI HIT * gain
E = ADDI HIT + pedl
```
The `pedl` was calculated as
```
pedl = -$floor(p*gain)
```
where `p` is the ADC reading corresponding to E = 0 keV.
Since `p` is a large magnitude negative number, the limited precision
of the `MULI` instruction parameter causes significant errors in `pedl`.
This patch aims to fis those errors. The new formula for `pedl` is
```
pedl = $floor(-p*$MRND(gain))
```
i.e., we use the same value for `gain` as the `MULI` instruction. This
is now in place for any automatic calibration calculations in
`step_temp_calib.l3`.
For the FS in space we use a fixed precomputed calibration. This is based on
the TVAC FS calibration for T=-36°C, with some adjustments for the changed
`acq_time=6`. The TVAC calib has been saved earlier to
`step_fs_calib-36.calib` with full precision, i.e., without taking `$MRND()`
into account. The awk script `step_fs_calib-36.awk` reverts those
calculations, applies the adjustments, and outputs the adjustes numbers. Since
awk does not have access to `$MRND()`, the script has been changed to output
formulas for `pedl`, including `$MRND()`,
`$MRND(f)` returns the floating point number `f` rounded to exactly
what `MULI R * f` will be compiled to.
STEP calibrates like this:
```
pedl := p*gain
a = MULI HIT * gain
a = ADDI HIT + pedl
```
This leads to large errors in `pedl` due to the limited resolution of `MULI`.
Instead use:
```
pedl = $MRND(p)*gain
```