Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/ms5535.asm @ 842:454ef5c2e6aa default tip
Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware
Make year settings until 2040 possible (This is likely the final release for this model)
| author | heinrichsweikamp |
|---|---|
| date | Sat, 29 Nov 2025 14:11:07 +0100 |
| parents | 6cb5518e74d2 |
| children |
| rev | line source |
|---|---|
| 815 | 1 ; OSTC Mk.2, 2N and 2C - diving computer code |
|
807
c50296c3059e
BUGFIX: Divetime had unwanted "." behind the minutes
heinrichsweikamp
parents:
714
diff
changeset
|
2 ; Copyright (C) 2015 HeinrichsWeikamp GbR |
| 0 | 3 |
| 4 ; This program is free software: you can redistribute it and/or modify | |
| 5 ; it under the terms of the GNU General Public License as published by | |
| 6 ; the Free Software Foundation, either version 3 of the License, or | |
| 7 ; (at your option) any later version. | |
| 8 | |
| 9 ; This program is distributed in the hope that it will be useful, | |
| 10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 ; GNU General Public License for more details. | |
| 13 | |
| 14 ; You should have received a copy of the GNU General Public License | |
| 15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 16 | |
| 17 | |
| 18 ; routines for Intersema MS5535A, MS5541B and MS5541C | |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
19 ; history: |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
20 ; 2005-09-26: Written by Matthias Heinrichs, info@heinrichsweikamp.com |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
21 ; 2008-08-21: MH last updated, with second order compensation. |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
22 ; 2011-01-19: jDG Clean up using true signed arithmetics. |
|
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
340
diff
changeset
|
23 ; 2011-05-19: jDG Avegaring temperature and amb_pressure in private variable, |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
340
diff
changeset
|
24 ; Use signed 16bit value for temperature (compat with avg !). |
|
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
340
diff
changeset
|
25 ; |
| 0 | 26 ; known bugs: |
| 27 ; ToDo: | |
| 28 | |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
29 ;============================================================================= |
|
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
30 ; Expose internal variables, to ease debug: |
|
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
31 global D1, D2 |
| 289 | 32 global C1, C2, C3, C4, C5, C6 |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
33 global xdT, xdT2, OFF, SENS, amb_pressure_avg, temperature_avg |
| 0 | 34 |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
35 ;============================================================================= |
| 0 | 36 calculate_compensation: |
| 704 | 37 ; xdT = D2 - C5 (s16 range -11.400 .. +12.350) |
| 38 movf C5+0,W ; Get Value to be subtracted | |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
39 subwf D2+0,W ; Do the Low Byte |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
40 movwf xdT+0 |
| 704 | 41 movf C5+1,W ; Then the high byte. |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
42 subwfb D2+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
43 movwf xdT+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
44 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
45 ; Second order temperature calculation |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
46 ; xdT/128 is in range -89..+96, hence signed 8bit. dT/128 = (2*dT)/256 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
47 rlcf xdT+0,W ; put hit bit in carry. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
48 rlcf xdT+1,W ; inject in high byte. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
49 movwf isr_xA+0 ; and put result in low byte. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
50 clrf isr_xA+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
51 btfsc xdT+1,7 ; If dT < 0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
52 setf isr_xA+1 ; then signextend to -1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
53 movff isr_xA+0,isr_xB+0 ; copy A to B |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
54 movff isr_xA+1,isr_xB+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
55 call isr_signed_mult16x16 ; dT*dT --> xC (32 bits) |
| 0 | 56 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
57 ; dT >= 0: divide by 8, ie. 3 shifts rights. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
58 ; dT < 0: divide by 2, ie. 1 shifts rights. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
59 movlw .3 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
60 btfss xdT+1,7 ; Was dT negatif ? |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
61 movlw .1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
62 calc_loop_1: |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
63 bcf STATUS,C ;dT^2 is positiv, so injected zeros. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
64 rrcf isr_xC+1,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
65 rrcf isr_xC+0,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
66 decfsz WREG |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
67 bra calc_loop_1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
68 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
69 movf isr_xC+0,W ; dT2 = dT - (dT/128)*(dT/128)/(2 ...or... 8) |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
70 subwf xdT+0,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
71 movwf xdT2+0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
72 movf isr_xC+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
73 subwfb xdT+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
74 movwf xdT2+1 |
| 0 | 75 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
76 ; Calculate OFF = C2 + ((C4-250)*dT2)/2^12 + 10000 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
77 ; (range +9.246 .. +18.887) |
| 704 | 78 movff C4+0,isr_xA+0 |
| 79 movff C4+1,isr_xA+1 | |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
80 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
81 movff xdT2+0,isr_xB+0 ; dT2 --> B |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
82 movff xdT2+1,isr_xB+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
83 call isr_signed_mult16x16 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
84 movlw .12-.8 ; A 12bit shift = 1 byte + 4 bits. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
85 call isr_shift_C31 |
| 0 | 86 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
87 movlw LOW(.10000) ; Add 10000 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
88 addwf isr_xC+1,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
89 movlw HIGH(.10000) |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
90 addwfc isr_xC+2,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
91 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
92 movf C2+0,W ; Add C2, and save into OFF |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
93 addwf isr_xC+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
94 movwf OFF+0 |
| 0 | 95 movf C2+1,W |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
96 addwfc isr_xC+2,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
97 movwf OFF+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
98 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
99 ; Calculate SENS = C1/2 + ((C3+200)*dT)/2^13 + 3000 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
100 movlw LOW(.200) ; C3+200 --> A |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
101 addwf C3+0,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
102 movwf isr_xA+0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
103 movlw HIGH(.200) |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
104 addwfc C3+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
105 movwf isr_xA+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
106 ; B still contains dT2 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
107 call isr_signed_mult16x16 ; A*B --> C |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
108 movlw .13-.8 ; A 13bit shift = 1 byte + 5 bits. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
109 call isr_shift_C31 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
110 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
111 bcf STATUS,C ; SENS = C1 / 2 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
112 rrcf C1+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
113 movwf SENS+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
114 rrcf C1+0,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
115 movwf SENS+0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
116 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
117 movlw LOW(.3000) ; Add 3000 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
118 addwf isr_xC+1,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
119 movlw HIGH(.3000) |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
120 addwfc isr_xC+2,F |
| 0 | 121 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
122 movf isr_xC+1,W ; And sum into SENS |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
123 addwf SENS+0,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
124 movf isr_xC+2,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
125 addwfc SENS+1,F |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
126 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
127 ; calculate amb_pressure = (sens * (d1-off))/2^12 + 1000 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
128 movf OFF+0,W ; d1-off --> a |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
129 subwf D1+0,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
130 movwf isr_xA+0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
131 movf OFF+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
132 subwfb D1+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
133 movwf isr_xA+1 |
| 0 | 134 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
135 movff SENS+0,isr_xB+0 ; sens --> b |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
136 movff SENS+1,isr_xB+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
137 call isr_signed_mult16x16 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
138 movlw .12-.8 ; a 12bit shift = 1 byte + 4 bits. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
139 call isr_shift_C31 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
140 |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
141 movlw LOW(.1000) ; add 1000 |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
142 addwf isr_xC+1,F |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
143 movlw HIGH(.1000) |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
144 addwfc isr_xC+2,F |
| 0 | 145 |
| 146 btfss simulatormode_active ; are we in simulator mode? | |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
147 bra calc_compensation_2 ; no |
| 0 | 148 |
|
824
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
149 movlw .5 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
150 cpfsgt isr_xC+2 ; >1280mbar ? |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
151 bra pressure_extra_common2 ; No |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
152 ; Yes, reset sim_pressure:2 to 1000mbar (End of sim) |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
153 movlw LOW .1000 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
154 movwf sim_pressure+0 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
155 movlw HIGH .1000 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
156 movwf sim_pressure+1 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
157 |
|
6cb5518e74d2
NEW: Quit Simulator automatically when starting a real dive
heinrichsweikamp
parents:
815
diff
changeset
|
158 pressure_extra_common2: |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
159 movff sim_pressure+0,isr_xC+1 ; override readings with simulator values |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
160 movff sim_pressure+1,isr_xC+2 |
| 0 | 161 |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
162 calc_compensation_2: |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
163 movf isr_xC+1,W ; Then sum_up to pressure averaging buffer. |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
164 addwf amb_pressure_avg+0,F |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
165 movf isr_xC+2,W |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
166 addwfc amb_pressure_avg+1,F |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
167 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
168 ; calculate temp = 200 + dT*(C6+100)/2^11 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
169 movlw LOW(.100) ; C6 + 100 --> A |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
170 addwf C6+0,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
171 movwf isr_xA+0 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
172 movlw HIGH(.100) |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
173 addwfc C6+1,W |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
174 movwf isr_xA+1 |
| 0 | 175 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
176 movff xdT2+0,isr_xB+0 ; dT2 --> B |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
177 movff xdT2+1,isr_xB+1 |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
178 call isr_signed_mult16x16 ; A*B |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
179 movlw .11-.8 ; A 12bit shift = 1 byte + 3 bits. |
|
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
180 call isr_shift_C31 |
| 0 | 181 |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
182 movlw LOW(.200) ; Add 200 |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
183 addwf isr_xC+1,F |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
184 movlw HIGH(.200) |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
185 addwfc isr_xC+2,F |
| 0 | 186 |
|
340
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
187 movf isr_xC+1,W |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
188 addwf temperature_avg+0,F |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
189 movf isr_xC+2,W |
|
ecbbbd423e86
BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents:
289
diff
changeset
|
190 addwfc temperature_avg+1,F |
| 0 | 191 |
|
161
8d6aca08f66b
Use signed arithmetic for pressure/temperature compensation.
JeanDo
parents:
83
diff
changeset
|
192 return ; Fertig mit allem |
| 0 | 193 |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
194 ;============================================================================= |
| 0 | 195 get_pressure_start: |
| 196 rcall reset_MS5535A | |
| 197 movlw b'10100000' ;+3*high as start and 1+low as stop! | |
| 198 get_pressure_start2: | |
| 199 movwf isr1_temp | |
| 200 movlw d'12' | |
| 201 movwf clock_count | |
| 202 rcall send_data_MS55535A | |
| 203 return | |
| 204 | |
| 205 get_pressure_value: | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
206 #ifndef TESTING |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
207 ; Use register injection instead when in MPLab Sim emulation... |
| 0 | 208 rcall get_2bytes_MS5535A |
| 209 movff dMSB,D1+1 | |
| 210 movff dLSB,D1+0 | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
211 #endif |
| 0 | 212 return |
| 213 | |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
214 ;============================================================================= |
| 0 | 215 get_temperature_start: |
| 216 rcall reset_MS5535A | |
| 217 movlw b'10010000' ;+3*high as start and 1+low as stop! | |
| 218 bra get_pressure_start2 ; continue in "get_pressure" | |
| 219 | |
| 220 get_temperature_value: | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
221 #ifndef TESTING |
|
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
222 ; Use register injection instead... |
| 0 | 223 rcall get_2bytes_MS5535A |
| 224 movff dMSB,D2+1 | |
| 225 movff dLSB,D2+0 | |
|
81
31fa973a70fd
Kludges to emulate inexisting devices when debugged with the MPLAB software SIMulator.
JeanDo
parents:
4
diff
changeset
|
226 #endif |
| 0 | 227 return |
| 228 | |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
229 ;============================================================================= |
| 0 | 230 get_calibration_data: |
| 714 | 231 banksel flag5 |
| 232 bsf no_sensor_int ; disable sensor interrupts | |
| 0 | 233 rcall reset_MS5535A |
| 234 movlw d'13' | |
| 235 movwf clock_count | |
| 236 movlw b'01010100' ;+3*high as start and 1+low as stop! | |
| 237 movwf isr1_temp | |
| 238 rcall send_data_MS55535A | |
| 239 rcall get_2bytes_MS5535A | |
| 289 | 240 |
| 241 #ifdef TESTING | |
| 242 movlw LOW(.18556) | |
| 243 movff WREG,W1+0 | |
| 244 movlw HIGH(.18556) | |
| 245 movff WREG,W1+1 | |
| 246 #else | |
| 0 | 247 movff dMSB,W1+1 |
| 248 movff dLSB,W1+0 | |
| 289 | 249 #endif |
| 0 | 250 |
| 251 movlw d'13' | |
| 252 movwf clock_count | |
| 253 movlw b'01011000' ;+3*high as start and 1+low as stop! | |
| 254 movwf isr1_temp | |
| 255 rcall send_data_MS55535A | |
| 256 rcall get_2bytes_MS5535A | |
| 289 | 257 #ifdef TESTING |
| 258 movlw LOW(.49183) | |
| 259 movff WREG,W2+0 | |
| 260 movlw HIGH(.49183) | |
| 261 movff WREG,W2+1 | |
| 262 #else | |
| 0 | 263 movff dMSB,W2+1 |
| 264 movff dLSB,W2+0 | |
| 289 | 265 #endif |
| 0 | 266 |
| 267 movlw d'13' | |
| 268 movwf clock_count | |
| 269 movlw b'01100100' ;+3*high as start and 1+low as stop! | |
| 270 movwf isr1_temp | |
| 271 rcall send_data_MS55535A | |
| 272 rcall get_2bytes_MS5535A | |
| 289 | 273 #ifdef TESTING |
| 274 movlw LOW(.22354) | |
| 275 movff WREG,W3+0 | |
| 276 movlw HIGH(.22354) | |
| 277 movff WREG,W3+1 | |
| 278 #else | |
| 0 | 279 movff dMSB,W3+1 |
| 280 movff dLSB,W3+0 | |
| 289 | 281 #endif |
| 0 | 282 |
| 283 movlw d'13' | |
| 284 movwf clock_count | |
| 285 movlw b'01101000' ;+3*high as start and 1+low as stop! | |
| 286 movwf isr1_temp | |
| 287 rcall send_data_MS55535A | |
| 288 rcall get_2bytes_MS5535A | |
| 289 | 289 #ifdef TESTING |
| 290 movlw LOW(.28083) | |
| 291 movff WREG,W4+0 | |
| 292 movlw HIGH(.28083) | |
| 293 movff WREG,W4+1 | |
| 294 #else | |
| 0 | 295 movff dMSB,W4+1 |
| 296 movff dLSB,W4+0 | |
| 289 | 297 #endif |
| 0 | 298 |
| 299 ; calculate C1 (16Bit) | |
| 300 movff W1+1, C1+1 | |
| 301 bcf STATUS,C | |
| 302 rrcf C1+1 | |
| 303 bcf STATUS,C | |
| 304 rrcf C1+1 | |
| 305 bcf STATUS,C | |
| 306 rrcf C1+1 | |
| 307 movff W1+0, C1+0 | |
| 308 bsf STATUS,C | |
| 309 btfss W1+1,0 | |
| 310 bcf STATUS,C | |
| 311 rrcf C1+0 | |
| 312 bsf STATUS,C | |
| 313 btfss W1+1,1 | |
| 314 bcf STATUS,C | |
| 315 rrcf C1+0 | |
| 316 bsf STATUS,C | |
| 317 btfss W1+1,2 | |
| 318 bcf STATUS,C | |
| 319 rrcf C1+0 | |
| 320 | |
| 321 ; calculate C2 (16Bit) | |
| 322 movff W2+0, C2+0 | |
| 323 bsf STATUS,C | |
| 324 btfss W2+1,0 | |
| 325 bcf STATUS,C | |
| 326 rrcf C2+0 | |
| 327 bsf STATUS,C | |
| 328 btfss W2+1,1 | |
| 329 bcf STATUS,C | |
| 330 rrcf C2+0 | |
| 331 bsf STATUS,C | |
| 332 btfss W2+1,2 | |
| 333 bcf STATUS,C | |
| 334 rrcf C2+0 | |
| 335 bsf STATUS,C | |
| 336 btfss W2+1,3 | |
| 337 bcf STATUS,C | |
| 338 rrcf C2+0 | |
| 339 bsf STATUS,C | |
| 340 btfss W2+1,4 | |
| 341 bcf STATUS,C | |
| 342 rrcf C2+0 | |
| 343 bsf STATUS,C | |
| 344 btfss W2+1,5 | |
| 345 bcf STATUS,C | |
| 346 rrcf C2+0 | |
| 347 | |
| 348 movff W2+1, C2+1 | |
| 349 bsf STATUS,C | |
| 350 btfss W1+0,0 | |
| 351 bcf STATUS,C | |
| 352 rrcf C2+1 | |
| 353 bsf STATUS,C | |
| 354 btfss W1+0,1 | |
| 355 bcf STATUS,C | |
| 356 rrcf C2+1 | |
| 357 bsf STATUS,C | |
| 358 btfss W1+0,2 | |
| 359 bcf STATUS,C | |
| 360 rrcf C2+1 | |
| 361 bcf STATUS,C | |
| 362 rrcf C2+1 | |
| 363 bcf STATUS,C | |
| 364 rrcf C2+1 | |
| 365 bcf STATUS,C | |
| 366 rrcf C2+1 | |
| 367 | |
| 368 ; calculate C3 (16Bit) | |
| 369 movff W3+1,C3+0 | |
| 370 bsf STATUS,C | |
| 371 btfss W3+0,7 | |
| 372 bcf STATUS,C | |
| 373 rlcf C3+0 | |
| 374 bsf STATUS,C | |
| 375 btfss W3+0,6 | |
| 376 bcf STATUS,C | |
| 377 rlcf C3+0 | |
| 378 clrf C3+1 | |
| 379 btfsc W3+1,7 | |
| 380 bsf C3+1,1 | |
| 381 btfsc W3+1,6 | |
| 382 bsf C3+1,0 | |
| 383 | |
| 384 ; calculate C4 (16Bit) | |
| 385 movff W4+1,C4+0 | |
| 386 bsf STATUS,C | |
| 387 btfss W4+0,7 | |
| 388 bcf STATUS,C | |
| 389 rlcf C4+0 | |
| 390 clrf C4+1 | |
| 391 btfsc W4+1,7 | |
| 392 bsf C4+1,0 | |
| 704 | 393 |
| 394 ; C4=C4-250 | |
| 395 movlw LOW(-.250) ; C4 - 250 --> C4 | |
| 396 addwf C4+0,W | |
| 397 movwf C4+0 | |
| 398 movlw -1 ; HIGH(- .250) is not understood... | |
| 399 addwfc C4+1,W | |
| 400 movwf C4+1 | |
| 0 | 401 |
| 402 ; calculate C5 (16Bit) | |
| 403 movff W3+0,C5+0 | |
| 404 bcf C5+0,6 | |
| 405 btfsc W2+0,0 | |
| 406 bsf C5+0,6 | |
| 407 bcf C5+0,7 | |
| 408 btfsc W2+0,1 | |
| 409 bsf C5+0,7 | |
| 410 clrf C5+1 | |
| 411 btfsc W2+0,2 | |
| 412 bsf C5+1,0 | |
| 413 btfsc W2+0,3 | |
| 414 bsf C5+1,1 | |
| 415 btfsc W2+0,4 | |
| 416 bsf C5+1,2 | |
| 417 btfsc W2+0,5 | |
| 418 bsf C5+1,3 | |
| 419 | |
| 704 | 420 ; calculate C5 = UT1 |
| 421 ; C5 = 8*C5 + 10000 (u16 range 10.000 .. +42.760) | |
| 422 clrf isr_xA+1 | |
| 423 movlw d'8' | |
| 424 movwf isr_xA+0 | |
| 425 movff C5+0,isr_xB+0 | |
| 426 movff C5+1,isr_xB+1 | |
| 427 call isr_unsigned_mult16x16 ;isr_xA*isr_xB=isr_xC | |
| 428 movff isr_xC+0,C5+0 | |
| 429 movff isr_xC+1,C5+1 | |
| 430 movlw LOW d'10000' | |
| 431 addwf C5+0,F | |
| 432 movlw HIGH d'10000' | |
| 433 addwfc C5+1,F ; = 8*C5 + 10000 | |
| 434 | |
| 0 | 435 ; calculate C6 (16Bit) |
| 436 clrf C6+1 | |
| 437 movff W4+0,C6+0 | |
| 438 bcf C6+0,7 | |
| 439 | |
| 440 bcf no_sensor_int ; enable sensor interrupts | |
| 441 return | |
| 442 | |
|
169
e26f49674956
Merge decoplan display for both GF and Buhlmann models.
JeanDo
parents:
161
diff
changeset
|
443 ;============================================================================= |
| 0 | 444 reset_MS5535A_one: |
| 445 bsf sensor_SDO | |
| 446 nop | |
| 447 bsf sensor_CLK | |
| 448 nop | |
| 449 nop | |
| 450 nop | |
| 451 nop | |
| 469 | 452 btfsc OSCCON,4 ; 32MHz Mode? |
| 453 rcall MS5535A_extra_wait ; Yes | |
| 0 | 454 bcf sensor_CLK |
| 455 return | |
| 456 | |
| 457 reset_MS5535A_zero: | |
| 458 bcf sensor_SDO | |
| 459 nop | |
| 460 bsf sensor_CLK | |
| 461 nop | |
| 462 nop | |
| 463 nop | |
| 464 nop | |
| 469 | 465 btfsc OSCCON,4 ; 32MHz Mode? |
| 466 rcall MS5535A_extra_wait ; Yes | |
| 0 | 467 bcf sensor_CLK |
| 468 return | |
| 469 | |
| 469 | 470 MS5535A_extra_wait: |
| 471 nop | |
| 472 nop | |
| 473 nop | |
| 474 nop | |
| 475 nop | |
| 476 return | |
| 477 | |
| 0 | 478 reset_MS5535A: |
| 479 rcall reset_MS5535A_one ;0 | |
| 480 rcall reset_MS5535A_zero | |
| 481 rcall reset_MS5535A_one | |
| 482 rcall reset_MS5535A_zero | |
| 483 rcall reset_MS5535A_one | |
| 484 rcall reset_MS5535A_zero | |
| 485 rcall reset_MS5535A_one | |
| 486 rcall reset_MS5535A_zero | |
| 487 rcall reset_MS5535A_one | |
| 488 rcall reset_MS5535A_zero | |
| 489 rcall reset_MS5535A_one | |
| 490 rcall reset_MS5535A_zero | |
| 491 rcall reset_MS5535A_one | |
| 492 rcall reset_MS5535A_zero | |
| 493 rcall reset_MS5535A_one | |
| 494 rcall reset_MS5535A_zero ;15 | |
| 495 rcall reset_MS5535A_zero | |
| 496 rcall reset_MS5535A_zero | |
| 497 rcall reset_MS5535A_zero | |
| 498 rcall reset_MS5535A_zero | |
| 499 rcall reset_MS5535A_zero ;20 | |
| 500 return | |
| 501 | |
| 502 get_2bytes_MS5535A: | |
| 503 movlw d'8' | |
| 504 movwf clock_count | |
| 505 rcall recieve_loop | |
| 506 movff isr1_temp,dMSB | |
| 507 | |
| 508 movlw d'8' | |
| 509 movwf clock_count | |
| 510 rcall recieve_loop | |
| 511 movff isr1_temp,dLSB | |
| 512 bsf sensor_CLK | |
| 513 nop | |
| 514 nop | |
| 515 nop | |
| 516 nop | |
| 469 | 517 btfsc OSCCON,4 ; 32MHz Mode? |
| 518 rcall MS5535A_extra_wait ; Yes | |
| 0 | 519 bcf sensor_CLK |
| 520 return | |
| 521 | |
| 522 recieve_loop: | |
| 523 bsf sensor_CLK | |
| 524 nop | |
| 525 nop | |
| 526 nop | |
| 527 nop | |
| 469 | 528 btfsc OSCCON,4 ; 32MHz Mode? |
| 529 rcall MS5535A_extra_wait ; Yes | |
| 0 | 530 bcf sensor_CLK |
| 531 btfss sensor_SDI ;MSB first | |
| 532 bcf STATUS,C | |
| 533 btfsc sensor_SDI ;MSB first | |
| 534 bsf STATUS,C | |
| 535 rlcf isr1_temp,F | |
| 536 decfsz clock_count,F | |
| 537 bra recieve_loop | |
| 538 return | |
| 539 | |
| 540 send_data_MS55535A: | |
| 541 ; send three startbits first | |
| 542 bcf sensor_CLK | |
| 543 bsf sensor_SDO | |
| 544 movlw d'3' | |
| 545 subwf clock_count,F ; total bit counter | |
| 546 bsf sensor_CLK | |
| 547 nop | |
| 548 nop | |
| 549 nop | |
| 550 nop | |
| 469 | 551 btfsc OSCCON,4 ; 32MHz Mode? |
| 552 rcall MS5535A_extra_wait ; Yes | |
| 0 | 553 bcf sensor_CLK |
| 554 nop | |
| 555 nop | |
| 556 nop | |
| 557 nop | |
| 469 | 558 btfsc OSCCON,4 ; 32MHz Mode? |
| 559 rcall MS5535A_extra_wait ; Yes | |
| 0 | 560 bsf sensor_CLK |
| 561 nop | |
| 562 nop | |
| 563 nop | |
| 564 nop | |
| 469 | 565 btfsc OSCCON,4 ; 32MHz Mode? |
| 566 rcall MS5535A_extra_wait ; Yes | |
| 0 | 567 bcf sensor_CLK |
| 568 nop | |
| 569 nop | |
| 570 nop | |
| 571 nop | |
| 469 | 572 btfsc OSCCON,4 ; 32MHz Mode? |
| 573 rcall MS5535A_extra_wait ; Yes | |
| 0 | 574 bsf sensor_CLK |
| 575 nop | |
| 576 nop | |
| 577 nop | |
| 578 nop | |
| 469 | 579 btfsc OSCCON,4 ; 32MHz Mode? |
| 580 rcall MS5535A_extra_wait ; Yes | |
| 0 | 581 bcf sensor_CLK |
| 582 ; now send 8 bytes from isr_temp1 and fill-up with zeros | |
| 469 | 583 databits: |
| 0 | 584 btfss isr1_temp,7 ;MSB first |
| 585 bcf sensor_SDO | |
| 586 btfsc isr1_temp,7 ;MSB first | |
| 587 bsf sensor_SDO | |
| 588 bcf STATUS,C | |
| 589 rlcf isr1_temp | |
| 590 | |
| 591 bsf sensor_CLK | |
| 592 nop | |
| 593 nop | |
| 594 nop | |
| 595 nop | |
| 469 | 596 btfsc OSCCON,4 ; 32MHz Mode? |
| 597 rcall MS5535A_extra_wait ; Yes | |
| 0 | 598 bcf sensor_CLK |
| 599 | |
| 600 decfsz clock_count,F | |
| 469 | 601 bra databits |
| 0 | 602 return |
