Mercurial > public > hwos_code
annotate src/calibrate.asm @ 454:0ef84436df32
minor: fix some alignments for OSTC cR
| author | heinrichsweikamp |
|---|---|
| date | Tue, 27 Sep 2016 16:03:31 +0200 |
| parents | aadfe9f2edaf |
| children | b7eb98dbd800 |
| rev | line source |
|---|---|
| 113 | 1 ;============================================================================= |
| 2 ; | |
| 3 ; File calibration.asm | |
| 4 ; | |
| 5 ; o2 sensor calibration subroutines | |
| 6 ; | |
| 7 ; Copyright (c) 2014, Heinrichs Weikamp, all right reserved. | |
| 8 ;============================================================================= | |
| 9 | |
| 448 | 10 #include "hwos.inc" |
| 11 #include "shared_definitions.h" ; Mailbox between c and asm | |
| 12 #include "math.inc" | |
| 113 | 13 #include "adc_lightsensor.inc" |
| 14 #include "eeprom_rs232.inc" | |
| 15 | |
| 16 calibrate CODE | |
| 17 | |
| 192 | 18 global check_sensors ; Check O2 sensor thresholds for fallback and voting logic |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
19 check_sensors: |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
20 ; Check min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
21 movff o2_mv_sensor1+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
22 movff o2_mv_sensor1+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
23 movlw LOW min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
24 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
25 movlw HIGH min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
26 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
27 call sub16 ; sub_c = sub_a - sub_b |
| 192 | 28 bsf use_O2_sensor1 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
29 btfsc neg_flag |
| 192 | 30 bcf use_O2_sensor1 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
31 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
32 movff o2_mv_sensor2+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
33 movff o2_mv_sensor2+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
34 movlw LOW min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
35 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
36 movlw HIGH min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
37 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
38 call sub16 ; sub_c = sub_a - sub_b |
| 192 | 39 bsf use_O2_sensor2 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
40 btfsc neg_flag |
| 192 | 41 bcf use_O2_sensor2 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
42 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
43 movff o2_mv_sensor3+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
44 movff o2_mv_sensor3+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
45 movlw LOW min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
46 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
47 movlw HIGH min_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
48 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
49 call sub16 ; sub_c = sub_a - sub_b |
| 192 | 50 bsf use_O2_sensor3 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
51 btfsc neg_flag |
| 192 | 52 bcf use_O2_sensor3 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
53 ; Check max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
54 movff o2_mv_sensor1+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
55 movff o2_mv_sensor1+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
56 movlw LOW max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
57 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
58 movlw HIGH max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
59 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
60 call sub16 ; sub_c = sub_a - sub_b |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
61 btfss neg_flag |
| 192 | 62 bcf use_O2_sensor1 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
63 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
64 movff o2_mv_sensor2+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
65 movff o2_mv_sensor2+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
66 movlw LOW max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
67 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
68 movlw HIGH max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
69 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
70 call sub16 ; sub_c = sub_a - sub_b |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
71 btfss neg_flag |
| 192 | 72 bcf use_O2_sensor2 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
73 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
74 movff o2_mv_sensor3+0, sub_a+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
75 movff o2_mv_sensor3+1, sub_a+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
76 movlw LOW max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
77 movwf sub_b+0 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
78 movlw HIGH max_mv |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
79 movwf sub_b+1 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
80 call sub16 ; sub_c = sub_a - sub_b |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
81 btfss neg_flag |
| 192 | 82 bcf use_O2_sensor3 ;=1: Use this sensor for deco |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
83 |
|
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
84 btfss hud_connection_ok ;=1: HUD connection ok |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
85 bra check_sensor2 ; No HUD/Digital data |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
86 |
| 147 | 87 ; Copy disable flags from digital input |
|
227
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
88 btfss sensor1_active |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
89 bcf use_O2_sensor1 |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
90 btfss sensor2_active |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
91 bcf use_O2_sensor2 |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
92 btfss sensor3_active |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
224
diff
changeset
|
93 bcf use_O2_sensor3 |
| 192 | 94 bra check_sensor3 ; Check for voting logic |
|
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
113
diff
changeset
|
95 |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
96 check_sensor2: |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
97 ; Copy disable flags from internal calibration routine |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
98 btfss sensor1_calibrated_ok |
| 192 | 99 bcf use_O2_sensor1 |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
100 btfss sensor2_calibrated_ok |
| 192 | 101 bcf use_O2_sensor2 |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
102 btfss sensor3_calibrated_ok |
| 192 | 103 bcf use_O2_sensor3 |
| 104 check_sensor3: ; Check for voting logic | |
| 105 bsf voting_logic_sensor1 | |
| 106 movff o2_ppo2_sensor1,temp1 | |
| 107 rcall check_sensor_voting_common | |
| 108 incfsz WREG ; Was Wreg=255? | |
| 109 bcf voting_logic_sensor1 ; Yes, ignore this sensor | |
| 110 bsf voting_logic_sensor2 | |
| 111 movff o2_ppo2_sensor2,temp1 | |
| 112 rcall check_sensor_voting_common | |
| 113 incfsz WREG ; Was Wreg=255? | |
| 114 bcf voting_logic_sensor2 ; Yes, ignore this sensor | |
| 115 bsf voting_logic_sensor3 | |
| 116 movff o2_ppo2_sensor3,temp1 | |
| 117 rcall check_sensor_voting_common | |
| 118 incfsz WREG ; Was Wreg=255? | |
| 119 bcf voting_logic_sensor3 ; Yes, ignore this sensor | |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
120 return |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
121 |
| 192 | 122 |
| 123 check_sensor_voting_common: | |
| 124 movf temp1,W | |
| 125 cpfsgt sensor_setpoint | |
| 126 bra check_sensor_voting_common2 ; temp1<sensor_setpoint | |
| 127 ; temp1>sensor_setpoint | |
| 128 movf temp1,W | |
| 129 subwf sensor_setpoint,W | |
| 130 movwf temp1 | |
| 131 check_sensor_voting_common1: | |
| 132 movlw sensor_voting_logic_threshold ; Threshold in 0.01bar | |
| 133 cpfsgt temp1 | |
| 134 retlw .255 ; Within range | |
| 135 retlw .0 ; Out of range | |
| 136 check_sensor_voting_common2: | |
| 137 ; temp1<sensor_setpoint | |
| 138 movf sensor_setpoint,W | |
| 139 subwf temp1,F | |
| 140 bra check_sensor_voting_common1 | |
| 141 | |
| 113 | 142 global calibrate_mix |
| 143 calibrate_mix: | |
| 144 ; calibrate S8 HUD | |
| 145 btfss s8_digital ; S8 Digital? | |
| 146 bra calibrate_mix2 ; No | |
| 147 | |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
148 ; Yes, calibrate any S8-connected HUD |
| 113 | 149 clrf temp1 ; Chksum |
| 150 movlw 0xAA ; Start Byte | |
| 151 addwf temp1,F | |
| 152 movff WREG,TXREG2 | |
| 153 call rs232_wait_tx2 | |
| 154 | |
| 155 movlw 0x31 ; Calibrate | |
| 156 addwf temp1,F | |
| 157 movff WREG,TXREG2 | |
| 158 call rs232_wait_tx2 | |
| 159 | |
| 160 movff opt_calibration_O2_ratio,WREG ; Calibration gas %O2 | |
| 161 addwf temp1,F | |
| 162 movff WREG,TXREG2 | |
| 163 call rs232_wait_tx2 | |
| 164 | |
| 165 movff amb_pressure+0,WREG ; Ambient pressure | |
| 166 addwf temp1,F | |
| 167 movff WREG,TXREG2 | |
| 168 call rs232_wait_tx2 | |
| 169 movff amb_pressure+1,WREG | |
| 170 addwf temp1,F | |
| 171 movff WREG,TXREG2 | |
| 172 call rs232_wait_tx2 | |
| 173 | |
| 174 movff temp1,TXREG2 ; Chksum | |
| 175 call rs232_wait_tx2 | |
| 176 | |
| 177 calibrate_mix2: | |
| 178 movff opt_calibration_O2_ratio,WREG ; Calibration gas %O2 | |
| 179 mullw .100 | |
| 180 movff PRODL,xA+0 | |
| 181 movff PRODH,xA+1 | |
| 182 ; (%O2*100)*[ambient,mbar]/100 -> xC | |
| 183 movff amb_pressure+0,xB+0 | |
| 184 movff amb_pressure+1,xB+1 | |
| 448 | 185 rcall calibrate_mix2_helper |
| 113 | 186 movff o2_mv_sensor1+0,xB+0 |
| 187 movff o2_mv_sensor1+1,xB+1 | |
| 188 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 189 ; xC= ppO2/mV | |
| 190 movff xC+0,opt_x_s1+0 | |
| 191 movff xC+1,opt_x_s1+1 ; Factor for Sensor1 | |
| 192 | |
| 193 movff opt_calibration_O2_ratio,WREG ; Calibration gas %O2 | |
| 194 mullw .100 | |
| 195 movff PRODL,xA+0 | |
| 196 movff PRODH,xA+1 | |
| 197 ; (%O2*100)*[ambient,mbar]/100 -> xC | |
| 198 movff amb_pressure+0,xB+0 | |
| 199 movff amb_pressure+1,xB+1 | |
| 448 | 200 rcall calibrate_mix2_helper |
| 113 | 201 movff o2_mv_sensor2+0,xB+0 |
| 202 movff o2_mv_sensor2+1,xB+1 | |
| 203 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 204 ; xC= ppO2/mV | |
| 205 movff xC+0,opt_x_s2+0 | |
| 206 movff xC+1,opt_x_s2+1 ; Factor for Sensor2 | |
| 207 | |
| 208 movff opt_calibration_O2_ratio,WREG ; Calibration gas %O2 | |
| 209 mullw .100 | |
| 210 movff PRODL,xA+0 | |
| 211 movff PRODH,xA+1 | |
| 212 ; (%O2*100)*[ambient,mbar]/100 -> xC | |
| 213 movff amb_pressure+0,xB+0 | |
| 214 movff amb_pressure+1,xB+1 | |
| 448 | 215 rcall calibrate_mix2_helper |
| 113 | 216 movff o2_mv_sensor3+0,xB+0 |
| 217 movff o2_mv_sensor3+1,xB+1 | |
| 218 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 219 ; xC= ppO2/mV | |
| 220 movff xC+0,opt_x_s3+0 | |
| 221 movff xC+1,opt_x_s3+1 ; Factor for Sensor3 | |
| 222 | |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
223 bsf sensor1_calibrated_ok |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
224 bsf sensor2_calibrated_ok |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
225 bsf sensor3_calibrated_ok ; Set flags prior check |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
226 rcall check_sensors ; Check O2 sensor thresholds min_mv and max_mv and set use_02_sensorX flags |
|
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
227 ; initialise internal calibration flags |
| 192 | 228 btfss use_O2_sensor1 ; Sensor out of range? |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
229 bcf sensor1_calibrated_ok ; Yes, disable this sensor |
| 192 | 230 btfss use_O2_sensor2 ; Sensor out of range? |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
231 bcf sensor2_calibrated_ok ; Yes, disable this sensor |
| 192 | 232 btfss use_O2_sensor3 ; Sensor out of range? |
|
189
e79bc535ef9e
ignore un-calibrated sensors even if they become valid
heinrichsweikamp
parents:
187
diff
changeset
|
233 bcf sensor3_calibrated_ok ; Yes, disable this sensor |
| 113 | 234 |
| 235 ; When no sensor is found, enable all three to show error state | |
| 192 | 236 btfsc use_O2_sensor1 |
| 113 | 237 return |
| 192 | 238 btfsc use_O2_sensor2 |
| 113 | 239 return |
| 192 | 240 btfsc use_O2_sensor3 |
| 113 | 241 return |
| 192 | 242 bsf use_O2_sensor1 |
| 243 bsf use_O2_sensor2 | |
| 244 bsf use_O2_sensor3 | |
| 113 | 245 ; Clear factors |
| 246 banksel opt_x_s1+0 | |
| 247 clrf opt_x_s1+0 | |
| 248 clrf opt_x_s1+1 | |
| 249 clrf opt_x_s2+0 | |
| 250 clrf opt_x_s2+1 | |
| 251 clrf opt_x_s3+0 | |
| 252 clrf opt_x_s3+1 | |
| 253 banksel common | |
| 254 return | |
| 255 | |
| 448 | 256 calibrate_mix2_helper: |
| 257 call mult16x16 ;xA*xB=xC | |
| 258 movlw LOW .100 | |
| 259 movwf xB+0 | |
| 260 movlw HIGH .100 | |
| 261 movwf xB+1 | |
| 262 goto div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return) | |
| 263 | |
| 264 | |
| 113 | 265 compute_ppo2_analog: |
| 266 call get_analog_inputs | |
| 267 bra compute_ppo2_common | |
| 268 | |
| 269 global compute_ppo2 ; compute mv_sensorX and ppo2_sensorX arrays | |
| 270 compute_ppo2: | |
| 236 | 271 btfss analog_o2_input ; cR hardware? |
| 113 | 272 return ; No |
| 273 | |
| 274 btfss s8_digital ; =1: Digital I/O | |
| 275 bra compute_ppo2_analog ; use analog | |
| 276 | |
| 277 ; use digital | |
| 278 btfss new_s8_data_available ; =1: New data frame recieved | |
| 279 return | |
| 448 | 280 rcall compute_mvolts_for_all_sensors |
| 113 | 281 |
| 282 compute_ppo2_common: | |
| 283 ; o2_mv_sensor1:2 * opt_x_s1:2 = o2_ppo2_sensor1/10000 | |
| 284 movff o2_mv_sensor1+0,xA+0 | |
| 285 movff o2_mv_sensor1+1,xA+1 | |
| 286 movff opt_x_s1+0,xB+0 | |
| 287 movff opt_x_s1+1,xB+1 | |
| 448 | 288 rcall compute_ppo2_common_helper |
| 190 | 289 movff xC+0,o2_ppo2_sensor1 ; result in 0.01bar |
| 192 | 290 ; ; Set to zero if sensor is not active! |
| 291 ; btfss use_O2_sensor1 | |
| 292 ; clrf o2_ppo2_sensor1 | |
| 113 | 293 |
| 294 ; o2_mv_sensor2:2 * opt_x_s1:2 = o2_ppo2_sensor2/10000 | |
| 295 movff o2_mv_sensor2+0,xA+0 | |
| 296 movff o2_mv_sensor2+1,xA+1 | |
| 297 movff opt_x_s2+0,xB+0 | |
| 298 movff opt_x_s2+1,xB+1 | |
| 448 | 299 rcall compute_ppo2_common_helper |
| 190 | 300 movff xC+0,o2_ppo2_sensor2 ; result in 0.01bar |
| 192 | 301 ; ; Set to zero if sensor is not active! |
| 302 ; btfss use_O2_sensor2 | |
| 303 ; clrf o2_ppo2_sensor2 | |
| 113 | 304 |
| 305 ; o2_mv_sensor3:2 * opt_x_s1:2 = o2_ppo2_sensor3/10000 | |
| 306 movff o2_mv_sensor3+0,xA+0 | |
| 307 movff o2_mv_sensor3+1,xA+1 | |
| 308 movff opt_x_s3+0,xB+0 | |
| 309 movff opt_x_s3+1,xB+1 | |
| 448 | 310 rcall compute_ppo2_common_helper |
| 311 movff xC+0,o2_ppo2_sensor3 ; result in 0.01bar | |
| 312 ; ; Set to zero if sensor is not active! | |
| 313 ; btfss use_O2_sensor3 | |
| 314 ; clrf o2_ppo2_sensor3 | |
| 315 return ; Done. | |
| 316 | |
| 317 compute_ppo2_common_helper: | |
| 113 | 318 call mult16x16 ;xA:2*xB:2=xC:4 |
| 319 movlw LOW .1000 | |
| 320 movwf xB+0 | |
| 448 | 321 movlw HIGH .1000 |
| 113 | 322 movwf xB+1 |
| 323 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 324 movlw d'1' | |
| 325 addwf xC+0,F | |
| 326 movlw d'0' | |
| 327 addwfc xC+1,F | |
| 448 | 328 tstfsz xC+1 ; ppO2 is higher then 2.55bar? |
| 329 setf xC+0 ; Yes. | |
| 330 return | |
| 113 | 331 |
| 332 compute_mvolts_for_all_sensors: ; Compute mV or all sensors (S8 Mode) | |
| 333 ; compute AD results in 100µV steps (16bit/sensor) | |
| 334 ; 24bit AD result is in 244,1406541nV | |
| 335 ; Devide 24bit value through 409,5999512 -> 410 (0,01% error) | |
| 336 #DEFINE ad2mv_factor .410 | |
| 337 ; Sensor 1 | |
| 338 clrf xC+3 | |
|
268
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
339 movff s8_rawdata_sensor1+2,xC+2 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
340 movff s8_rawdata_sensor1+1,xC+1 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
341 movff s8_rawdata_sensor1+0,xC+0 |
| 113 | 342 movlw LOW ad2mv_factor |
| 343 movwf xB+0 | |
| 344 movlw HIGH ad2mv_factor | |
| 345 movwf xB+1 | |
| 346 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 347 movff xC+1,o2_mv_sensor1+1 | |
| 348 movff xC+0,o2_mv_sensor1+0 ; in 100uV steps | |
| 349 ; Sensor 2 | |
| 350 clrf xC+3 | |
|
268
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
351 movff s8_rawdata_sensor2+2,xC+2 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
352 movff s8_rawdata_sensor2+1,xC+1 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
353 movff s8_rawdata_sensor2+0,xC+0 |
| 113 | 354 movlw LOW ad2mv_factor |
| 355 movwf xB+0 | |
| 356 movlw HIGH ad2mv_factor | |
| 357 movwf xB+1 | |
| 358 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 359 movff xC+1,o2_mv_sensor2+1 | |
| 360 movff xC+0,o2_mv_sensor2+0 ; in 100uV steps | |
| 361 ; Sensor 3 | |
| 362 clrf xC+3 | |
|
268
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
363 movff s8_rawdata_sensor3+2,xC+2 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
364 movff s8_rawdata_sensor3+1,xC+1 |
|
29acdb601548
BUGFIX: Increase timing tolerance for S8 HUD (cR only)
heinrichsweikamp
parents:
236
diff
changeset
|
365 movff s8_rawdata_sensor3+0,xC+0 |
| 113 | 366 movlw LOW ad2mv_factor |
| 367 movwf xB+0 | |
| 368 movlw HIGH ad2mv_factor | |
| 369 movwf xB+1 | |
| 370 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 371 movff xC+1,o2_mv_sensor3+1 | |
| 372 movff xC+0,o2_mv_sensor3+0 ; in 100uV steps | |
| 373 | |
| 374 bcf new_s8_data_available ; Clear flag | |
| 375 return ; Done. | |
| 376 | |
|
352
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
377 global transmit_setpoint ; Transmit current setpoint from WREG (in cbar) to external electronics |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
378 transmit_setpoint: |
| 448 | 379 return |
|
352
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
380 btfss s8_digital ; S8 Digital? |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
381 return ; No, ignore |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
382 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
383 ; Yes, transmit setpoint from WREG |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
384 movwf temp2 ; Store setpoint |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
385 clrf temp1 ; Chksum |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
386 movlw 0xAA ; Start Byte |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
387 addwf temp1,F |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
388 movff WREG,TXREG2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
389 call rs232_wait_tx2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
390 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
391 movlw 0x60 ; New SP |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
392 addwf temp1,F |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
393 movff WREG,TXREG2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
394 call rs232_wait_tx2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
395 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
396 movff temp2,WREG ; SP in cbar |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
397 addwf temp1,F |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
398 movff WREG,TXREG2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
399 call rs232_wait_tx2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
400 |
| 448 | 401 movff temp1,TXREG2 ; Chksum |
|
352
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
402 call rs232_wait_tx2 |
|
5c6da9fa5cb0
add setpoint change to first sample in CCR mode
heinrichsweikamp
parents:
275
diff
changeset
|
403 return |
| 113 | 404 |
| 405 | |
| 406 END |
