Mercurial > public > hwos_code
comparison src/calibrate.asm @ 564:54346c651b6a
bring digital S8 HUD back to life...
| author | heinrichsweikamp |
|---|---|
| date | Mon, 05 Feb 2018 17:59:55 +0100 |
| parents | b7eb98dbd800 |
| children | b455b31ce022 |
comparison
equal
deleted
inserted
replaced
| 563:f4faff954816 | 564:54346c651b6a |
|---|---|
| 101 btfss sensor2_calibrated_ok | 101 btfss sensor2_calibrated_ok |
| 102 bcf use_O2_sensor2 | 102 bcf use_O2_sensor2 |
| 103 btfss sensor3_calibrated_ok | 103 btfss sensor3_calibrated_ok |
| 104 bcf use_O2_sensor3 | 104 bcf use_O2_sensor3 |
| 105 check_sensor3: ; Check for voting logic | 105 check_sensor3: ; Check for voting logic |
| 106 ; DELETE - voting is done in calc_deko_divemode_sensor ## voting logic | |
| 107 ; bsf voting_logic_sensor1 | |
| 108 ; movff o2_ppo2_sensor1,temp1 | |
| 109 ; rcall check_sensor_voting_common | |
| 110 ; incfsz WREG ; Was Wreg=255? | |
| 111 ; bcf voting_logic_sensor1 ; Yes, ignore this sensor | |
| 112 ; bsf voting_logic_sensor2 | |
| 113 ; movff o2_ppo2_sensor2,temp1 | |
| 114 ; rcall check_sensor_voting_common | |
| 115 ; incfsz WREG ; Was Wreg=255? | |
| 116 ; bcf voting_logic_sensor2 ; Yes, ignore this sensor | |
| 117 ; bsf voting_logic_sensor3 | |
| 118 ; movff o2_ppo2_sensor3,temp1 | |
| 119 ; ;rcall check_sensor_voting_common | |
| 120 ; incfsz WREG ; Was Wreg=255? | |
| 121 ; bcf voting_logic_sensor3 ; Yes, ignore this sensor | 106 ; bcf voting_logic_sensor3 ; Yes, ignore this sensor |
| 122 return | 107 return |
| 123 | 108 |
| 124 ; DELETE COMPLETE FUNTION, PARTS OF THE CODE HAVE MIGRATED TO calc_deko_divemode_sensor ## voting logic | |
| 125 ; check_sensor_voting_common: | |
| 126 ; movf temp1,W | |
| 127 ; cpfsgt sensor_setpoint | |
| 128 ; bra check_sensor_voting_common2 ; temp1<sensor_setpoint | |
| 129 ; ; temp1>sensor_setpoint | |
| 130 ; movf temp1,W | |
| 131 ; subwf sensor_setpoint,W | |
| 132 ; movwf temp1 | |
| 133 ; check_sensor_voting_common1: | |
| 134 ; movlw sensor_voting_logic_threshold ; Threshold in 0.01bar | |
| 135 ; cpfsgt temp1 | |
| 136 ; retlw .255 ; Within range | |
| 137 ; retlw .0 ; Out of range | |
| 138 ; check_sensor_voting_common2: | |
| 139 ; ; temp1<sensor_setpoint | |
| 140 ; movf sensor_setpoint,W | |
| 141 ; subwf temp1,F | |
| 142 ; bra check_sensor_voting_common1 | |
| 143 | 109 |
| 144 global calibrate_mix | 110 global calibrate_mix |
| 145 calibrate_mix: | 111 calibrate_mix: |
| 146 ; calibrate S8 HUD | 112 ; calibrate S8 HUD |
| 147 btfss s8_digital ; S8 Digital? | 113 btfss s8_digital ; S8 Digital? |
| 262 movlw LOW .100 | 228 movlw LOW .100 |
| 263 movwf xB+0 | 229 movwf xB+0 |
| 264 movlw HIGH .100 | 230 movlw HIGH .100 |
| 265 movwf xB+1 | 231 movwf xB+1 |
| 266 goto div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return) | 232 goto div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder (And return) |
| 267 | |
| 268 | |
| 269 ; DELETE COMPLETE FUNTION, PARTS OF THE CODE HAVE MIGRATED TO calc_deko_divemode_sensor ## voting logic | |
| 270 ; compute_ppo2_analog: | |
| 271 ; call get_analog_inputs | |
| 272 ; bra compute_ppo2_common | |
| 273 | |
| 274 ; global compute_ppo2 ; compute mv_sensorX and ppo2_sensorX arrays | |
| 275 ; compute_ppo2: | |
| 276 ; btfss analog_o2_input ; cR hardware? | |
| 277 ; return ; No | |
| 278 | |
| 279 ; btfss s8_digital ; =1: Digital I/O | |
| 280 ; bra compute_ppo2_analog ; use analog | |
| 281 | |
| 282 ; ; use digital | |
| 283 ; btfss new_s8_data_available ; =1: New data frame recieved | |
| 284 ; return | |
| 285 ; rcall compute_mvolts_for_all_sensors | |
| 286 | |
| 287 ; compute_ppo2_common: | |
| 288 ; ; o2_mv_sensor1:2 * opt_x_s1:2 = o2_ppo2_sensor1/10000 | |
| 289 ; movff o2_mv_sensor1+0,xA+0 | |
| 290 ; movff o2_mv_sensor1+1,xA+1 | |
| 291 ; movff opt_x_s1+0,xB+0 | |
| 292 ; movff opt_x_s1+1,xB+1 | |
| 293 ; rcall compute_ppo2_common_helper | |
| 294 ; movff xC+0,o2_ppo2_sensor1 ; result in 0.01bar | |
| 295 ; ; ; Set to zero if sensor is not active! | |
| 296 ; ; btfss use_O2_sensor1 | |
| 297 ; ; clrf o2_ppo2_sensor1 | |
| 298 | |
| 299 ; ; o2_mv_sensor2:2 * opt_x_s1:2 = o2_ppo2_sensor2/10000 | |
| 300 ; movff o2_mv_sensor2+0,xA+0 | |
| 301 ; movff o2_mv_sensor2+1,xA+1 | |
| 302 ; movff opt_x_s2+0,xB+0 | |
| 303 ; movff opt_x_s2+1,xB+1 | |
| 304 ; rcall compute_ppo2_common_helper | |
| 305 ; movff xC+0,o2_ppo2_sensor2 ; result in 0.01bar | |
| 306 ; ; ; Set to zero if sensor is not active! | |
| 307 ; ; btfss use_O2_sensor2 | |
| 308 ; ; clrf o2_ppo2_sensor2 | |
| 309 | |
| 310 ; ; o2_mv_sensor3:2 * opt_x_s1:2 = o2_ppo2_sensor3/10000 | |
| 311 ; movff o2_mv_sensor3+0,xA+0 | |
| 312 ; movff o2_mv_sensor3+1,xA+1 | |
| 313 ; movff opt_x_s3+0,xB+0 | |
| 314 ; movff opt_x_s3+1,xB+1 | |
| 315 ; rcall compute_ppo2_common_helper | |
| 316 ; movff xC+0,o2_ppo2_sensor3 ; result in 0.01bar | |
| 317 ; ; ; Set to zero if sensor is not active! | |
| 318 ; ; btfss use_O2_sensor3 | |
| 319 ; ; clrf o2_ppo2_sensor3 | |
| 320 ; return ; Done. | |
| 321 | |
| 322 ; compute_ppo2_common_helper: | |
| 323 ; call mult16x16 ;xA:2*xB:2=xC:4 | |
| 324 ; movlw LOW .1000 | |
| 325 ; movwf xB+0 | |
| 326 ; movlw HIGH .1000 | |
| 327 ; movwf xB+1 | |
| 328 ; call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 329 ; movlw d'1' | |
| 330 ; addwf xC+0,F | |
| 331 ; movlw d'0' | |
| 332 ; addwfc xC+1,F | |
| 333 ; tstfsz xC+1 ; ppO2 is higher then 2.55bar? | |
| 334 ; setf xC+0 ; Yes. | |
| 335 ; return | |
| 336 | 233 |
| 337 | 234 |
| 338 global compute_mvolts_for_all_sensors | 235 global compute_mvolts_for_all_sensors |
| 339 compute_mvolts_for_all_sensors: ; Compute mV or all sensors (S8 Mode) | 236 compute_mvolts_for_all_sensors: ; Compute mV or all sensors (S8 Mode) |
| 340 ; compute AD results in 100µV steps (16bit/sensor) | 237 ; compute AD results in 100µV steps (16bit/sensor) |
