annotate src/adc_lightsensor.asm @ 654:75e90cd0c2c3

hwOS sport 10.77 release
author heinrichsweikamp
date Thu, 14 Mar 2024 16:56:46 +0100
parents bc214815deb2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
heinrichsweikamp
parents:
diff changeset
1 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
2 ;
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
3 ; File adc_lightsensor.asm * combined next generation V3.11.1
0
heinrichsweikamp
parents:
diff changeset
4 ;
heinrichsweikamp
parents:
diff changeset
5 ;
654
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
6 ; Copyright (c) 2011, JD Gascuel, heinrichs weikamp gmbh, all right reserved.
0
heinrichsweikamp
parents:
diff changeset
7 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
8 ; HISTORY
heinrichsweikamp
parents:
diff changeset
9 ; 2011-08-08 : [mH] moving from OSTC code
heinrichsweikamp
parents:
diff changeset
10
275
653a3ab08062 rename into hwOS
heinrichsweikamp
parents: 270
diff changeset
11 #include "hwos.inc"
0
heinrichsweikamp
parents:
diff changeset
12 #include "math.inc"
heinrichsweikamp
parents:
diff changeset
13 #include "wait.inc"
heinrichsweikamp
parents:
diff changeset
14 #include "eeprom_rs232.inc"
113
heinrichsweikamp
parents: 44
diff changeset
15 #include "i2c.inc"
0
heinrichsweikamp
parents:
diff changeset
16
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
17
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
18 ;=============================================================================
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
19 adc_light CODE
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
20 ;=============================================================================
0
heinrichsweikamp
parents:
diff changeset
21
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
22
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
23 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
24 ; Helper Function - wait on ADC to finish conversion
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
25 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
26 ; bank safe
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
27 ;
643
7d8a4c60ec1a 3.15 release
heinrichsweikamp
parents: 640
diff changeset
28 global wait_adc
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
29 wait_adc:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
30 movwf ADCON0 ; select ADC channel
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
31 nop ; wait a short moment
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
32 nop ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
33 nop ; .....
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
34 nop ; .......
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
35 bsf ADCON0,1 ; start ADC
0
heinrichsweikamp
parents:
diff changeset
36 wait_adc2:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
37 btfsc ADCON0,1 ; ADC done?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
38 bra wait_adc2 ; NO - wait
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
39 return ; YES - done
0
heinrichsweikamp
parents:
diff changeset
40
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
41
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
42 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
43 ; get Battery Voltage
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
44 ;
0
heinrichsweikamp
parents:
diff changeset
45 global get_battery_voltage
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
46 get_battery_voltage:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
47 btfss battery_gauge_available ; battery gauge IC available?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
48 bra get_battery_voltage_2 ; NO - OSTC hardware without gauge IC
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
49 bsf battery_is_36v ; YES - gauge IC available, 3.6V battery
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
50 call lt2942_get_accumulated_charge ; - read coulomb counter
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
51 call lt2942_get_voltage ; - read battery voltage
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
52 call lt2942_get_temperature ; - read battery temperature
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
53 tstfsz batt_voltage+1 ; - read voltage < 256 mV ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
54 bra get_battery_voltage_1 ; NO - proceed
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
55 call lt2942_get_accumulated_charge ; YES - re-read coulomb counter
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
56 call lt2942_get_voltage ; - re-read battery voltage
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
57 call lt2942_get_temperature ; - re-read battery temperature
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
58 ;bra get_battery_voltage_1 ; - proceed
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
59
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
60 get_battery_voltage_1:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
61 rcall get_battery_voltage_low ; check for battery low condition
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
62 btfsc divemode ; in dive mode?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
63 return ; YES - done
120
e2f04bb2539c battery check in sleep
heinrichsweikamp
parents: 118
diff changeset
64
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
65 bcf cv_active ; clear CV charing status by default
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
66 bcf cc_active ; clear CC charing status ny default
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
67 bcf LEDr ; switch off red LED
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
68 bcf TRISJ,2 ; activate Chrg-Out output
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
69 bsf CHRG_OUT ; start charger
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
70 nop ; ignore some noise
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
71 nop ; ...
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
72 nop ; ...
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
73 nop ; ...
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
74 btfss CHRG_IN ; charging?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
75 bra charge_cc_active ; YES - charging in CC mode
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
76 bcf CHRG_OUT ; NO - stop charger
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
77 bsf TRISJ,2 ; - set Chrg-Out output to high impedance
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
78 WAITMS d'1' ; - wait 1 ms
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
79 btfsc CHRG_IN ; - still charging?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
80 return ; NO - done
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
81 ;bra charge_cv_active ; YES - charging in CV mode
120
e2f04bb2539c battery check in sleep
heinrichsweikamp
parents: 118
diff changeset
82
603
00b24fb4324d second method to detect a full charge
heinrichsweikamp
parents: 582
diff changeset
83 charge_cv_active:
650
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
84 btfss analog_switches ; does the OSTC have analog switches?
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
85 bra charge_cv_active1 ; NO
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
86 btfsc surfmode_menu ; YES - in surface menus?
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
87 bsf trigger_timeout ; YES - exit to surface mode during charging
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
88 charge_cv_active1:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
89 decfsz get_bat_volt_counter,F ; decrement counter, became zero?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
90 return ; NO - not yet, done
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
91 movlw .15 ; YES - battery voltage >= 16*256mV (4.096V)
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
92 cpfsgt batt_voltage+1 ; - ... ?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
93 bra charge_cc_active ; NO
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
94 bsf cc_active ; YES - set CC charging status
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
95 bsf cv_active ; - set CV charging status
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
96 bsf LEDr ; - indicate charging
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
97 call lt2942_charge_done ; - reset accumulating registers to 0xFFFF
654
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
98 btfsc lock_cycle_counter ; cycle counted already?
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
99 bra charge_cv_active2 ; Yes, skip
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
100 banksel charge_cycles
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
101 INCI charge_cycles ; increase charge_cycles counter by one
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
102 banksel common
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
103 bsf lock_cycle_counter ; lock cycle counter
75e90cd0c2c3 hwOS sport 10.77 release
heinrichsweikamp
parents: 650
diff changeset
104 charge_cv_active2:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
105 WAITMS d'10' ; - wait 10 ms
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
106 bcf LEDr ; - indicate charging
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
107 bsf get_bat_volt_counter,0 ; - set counter to 1
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
108 return ; - done
120
e2f04bb2539c battery check in sleep
heinrichsweikamp
parents: 118
diff changeset
109
207
f5d909e03f52 charge indicator on surface screen
heinrichsweikamp
parents: 204
diff changeset
110 charge_cc_active:
650
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
111 btfss analog_switches ; does the OSTC have analog switches?
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
112 bra charge_cc_active1 ; NO
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
113 btfsc surfmode_menu ; YES - in surface menus?
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
114 bsf trigger_timeout ; YES - exit to surface mode during charging
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
115 charge_cc_active1:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
116 bsf cc_active ; set CC charging mode
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
117 bsf LEDr ; indicate charging
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
118 bcf CHRG_OUT ;
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
119 bsf TRISJ,2 ; set chrg-Out output to high impedance
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
120 movlw .15 ; battery voltage >= 16*256mV (4.096 V)
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
121 cpfsgt batt_voltage+1 ; ... ?
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
122 bra charge_cc_active2 ; NO
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
123 movlw .81 ; YES - battery voltage >= 80mV (+4096mV from batt_voltage+1)
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
124 cpfslt batt_voltage+0 ; - ... ?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
125 bra charge_cv_active ; YES
603
00b24fb4324d second method to detect a full charge
heinrichsweikamp
parents: 582
diff changeset
126 charge_cc_active2:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
127 movlw .10 ; NO - set counter to 10
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
128 movwf get_bat_volt_counter ; - ...
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
129 return ; - done
113
heinrichsweikamp
parents: 44
diff changeset
130
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
131 get_battery_voltage_2: ; no gauge IC available, use ADC to measure battery voltage
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
132 ; additional charging disable in software
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
133 bsf charge_disable ; set charging-inhibit signal
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
134 bcf charge_enable ; activate charging-inhibit signal
615
b87f23fae743 work on new battery menu
heinrichsweikamp
parents: 608
diff changeset
135
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
136 bsf adc_is_running ; =1: the ADC is in use
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
137 movlw b'00100000' ; 2.048 Volt Vref+ -> 1 LSB = 500 µV
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
138 movwf ADCON1 ; ...
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
139 movlw b'00011001' ; power on ADC, select AN6
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
140 rcall wait_adc ; take measurement
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
141 MOVII ADRESL,batt_voltage ; store value
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
142 bcf ADCON0,0 ; power off ADC
0
heinrichsweikamp
parents:
diff changeset
143
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
144 ; ; multiply with 2.006 to be exact here...
0
heinrichsweikamp
parents:
diff changeset
145 ; bcf STATUS,C
heinrichsweikamp
parents:
diff changeset
146 ; rlcf xA+0,F
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
147 ; rlcf xA+1,F ; x2
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
148 ; MOVII xA,batt_voltage ; store value
0
heinrichsweikamp
parents:
diff changeset
149
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
150 bcf battery_is_36v ; by default assume it is a 1.5 battery
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
151 MOVII batt_voltage,sub_b ; load measured battery voltage
0
heinrichsweikamp
parents:
diff changeset
152
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
153 ; check if the battery is a 3.6V lithium
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
154 MOVLI lithium_36v_low,sub_a ; load threshold for 3.6 Volt lithium battery
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
155 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
156 btfss neg_flag ; battery voltage > 3.6 V lithium threshold ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
157 bra get_battery_voltage_9 ; NO - keep assumption of 1.5V battery
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
158 bsf battery_is_36v ; YES - set flag
0
heinrichsweikamp
parents:
diff changeset
159
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
160 ; check if the battery is near-dead already
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
161 MOVLI lithium_36v_empty,sub_a ; load threshold for near-dead lithium battery
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
162 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
163 btfsc neg_flag ; battery voltage > dead-battery threshold ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
164 bra get_battery_voltage_3 ; YES - battery is still ok
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
165 movlw .128 ; NO - battery is probably dead very soon, set ">=24Ah used"
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
166 movff WREG,battery_gauge+5 ; - into battery gauge registers
0
heinrichsweikamp
parents:
diff changeset
167
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
168 get_battery_voltage_3: ; 3.6V battery gauge mode
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
169 ; SMOVQQ "by hand" as the macro does not work with arguments that have a '+something' with them
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
170 bcf trigger_isr_updates ; clear flag, it will be set by the ISR in case it had kicked in
0
heinrichsweikamp
parents:
diff changeset
171 movff battery_gauge+5,xC+3
heinrichsweikamp
parents:
diff changeset
172 movff battery_gauge+4,xC+2
heinrichsweikamp
parents:
diff changeset
173 movff battery_gauge+3,xC+1
heinrichsweikamp
parents:
diff changeset
174 movff battery_gauge+2,xC+0
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
175 btfsc trigger_isr_updates ; did the ISR kicked in since we cleared the flag?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
176 bra get_battery_voltage_3 ; YES - retry copy
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
177
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
178 ; battery_gauge: 6 is nAs
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
179 ; divide through 65536
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
180 ; divide through battery_capacity:2
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
181 ; result is in percent
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
182 MOVII battery_capacity_internal,xB
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
183 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder
0
heinrichsweikamp
parents:
diff changeset
184 movff xC+0,lo
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
185 ; limit to 100
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
186 movlw .100
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
187 cpfslt lo
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
188 movwf lo
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
189 ; lo will be between 0 (full) and 100 (empty)
0
heinrichsweikamp
parents:
diff changeset
190 movf lo,W
heinrichsweikamp
parents:
diff changeset
191 sublw .100
heinrichsweikamp
parents:
diff changeset
192 movwf lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
193 get_battery_voltage_4:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
194 movlw .100 ; start with default of 100%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
195 cpfslt lo ; > 100%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
196 movwf lo ; YES - limit to 100%
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
197 ; lo will be between 100 (full) and 0 (empty)
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
198 ; use 3.6V battery sensing based on 50 mA load
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
199 MOVLI lithium_36v_75,sub_a ; load threshold for > 75%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
200 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
201 btfsc neg_flag ; battery voltage above 75% level?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
202 bra get_battery_voltage_5 ; YES
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
203 movlw .75 ; NO - set to 75%
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
204 movwf lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
205 get_battery_voltage_5:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
206 ; 50%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
207 MOVLI lithium_36v_50,sub_a ; load threshold for > 50%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
208 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
209 btfsc neg_flag ; battery voltage above 75% level?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
210 bra get_battery_voltage_6 ; YES
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
211 movlw .50 ; NO - set to 50%
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
212 movwf lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
213 get_battery_voltage_6:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
214 ; 25%
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
215 MOVLI lithium_36v_25,sub_a ; load threshold for > 25%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
216 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
217 btfsc neg_flag ; battery voltage above 25% level?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
218 bra get_battery_voltage_7 ; YES
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
219 movlw .25 ; NO - set to 25%
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
220 movwf lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
221 get_battery_voltage_7:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
222 ; 10%
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
223 MOVLI lithium_36v_10,sub_a ; load threshold for > 10%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
224 call cmpU16 ; sub_a - sub_b
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
225 btfsc neg_flag ; battery voltage above 10% level?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
226 bra get_battery_voltage_8 ; YES
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
227 movlw .10 ; NO - set to 10%
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
228 movwf lo
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
229 get_battery_voltage_8:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
230 movlw .100 ; maximum is 100 (%)
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
231 cpfslt lo ; > 100% ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
232 movwf lo ; YES - limit to 100%
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
233 movf batt_percent,W ; get last battery percentage
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
234 cpfsgt lo ; current battery % < last battery % ?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
235 movff lo,batt_percent ; YES - take new value (keep batt_percent on the lowest value found)
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
236 btfsc battery_is_36v ; using a 3.6 volt battery?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
237 movff lo,batt_percent ; YES - take new value (always use computed value for 3.6V battery)
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
238 bcf adc_is_running ; done with ADC
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
239 ;bra get_battery_voltage_low ; check for battery low condition (and return)
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
240
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
241 get_battery_voltage_low:
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
242 ; check for battery low condition
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
243 movlw battery_warn_level_36+1 ; get threshold for 3.6 Volt battery warning, incremented by 1
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
244 btfss battery_is_36v ; actually a 3.6 Volt battery detected?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
245 movlw battery_warn_level_15+1 ; NO - replace with 1.5 Volt battery warning, incremented by 1
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
246 bsf battery_low_condition ; set battery low condition by default
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
247 cpfslt batt_percent ; current battery level <= warning threshold ?
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
248 bcf battery_low_condition ; NO - clear battery low condition
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
249 return ; - done
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
250
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
251 get_battery_voltage_9:
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
252 ; use 1.5V battery voltage mode
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
253 ; use approximation (batt_voltage-aa_15v_low)/4 = lo
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
254 MOVII batt_voltage,sub_a ; load battery voltage
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
255 MOVLI aa_15v_low, sub_b ; load offset
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
256 call subU16 ; sub_c = sub_a - sub_b
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
257 bcf STATUS,C ; shift right to divide / 2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
258 rrcf sub_c+1
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
259 rrcf sub_c+0
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
260 bcf STATUS,C ; another shift right to divide / 4
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
261 rrcf sub_c+1
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
262 rrcf sub_c+0
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
263 movff sub_c+0,lo ; store result
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
264 bra get_battery_voltage_8 ; check limits and return
0
heinrichsweikamp
parents:
diff changeset
265
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
266
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
267 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
268 ; get ambient Light Level
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
269 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
270 ; called from ISR only, in context bank isr_backup
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
271 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
272 global get_ambient_level
628
cd58f7fc86db 3.05 stable work
heinrichsweikamp
parents: 623
diff changeset
273 get_ambient_level:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
274 btfsc sleepmode ; in sleep mode?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
275 return ; YES - done
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
276 btfsc adc_is_running ; NO - ADC in use?
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
277 return ; YES - abort
650
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
278 TSTOSS opt_use_AmbientSensor ; =1: Use the ambient sensor
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
279 bra get_ambient_level0 ; NO, skip and use fixed value
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
280 banksel HW_descriptor ; NO - select bank where hardware descriptor is stored
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
281 btfsc ambient_sensor ; - ambient sensor available?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
282 bra get_ambient_level1 ; YES - use sensor
650
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
283 get_ambient_level0:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
284 banksel isr_backup ; NO - back to ISR default bank
645
070528a88715 3.16 release
heinrichsweikamp
parents: 643
diff changeset
285 movff brightness,isr_lo ; - get brightness selection
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
286 incf isr_lo,F ; - 0-2 -> 1-3
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
287 movlw ambient_light_max_high_cr ; - default selection to brightest setting
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
288 dcfsnz isr_lo,F ; - level 0 (eco) selected?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
289 movlw ambient_light_max_eco ; YES - select eco brightness
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
290 dcfsnz isr_lo,F ; - level 1 (medium) selected?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
291 movlw ambient_light_max_medium ; YES - select medium brightness
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
292 movwf ambient_light+0 ; - store selection
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
293 movwf max_CCPR1L ; - store value for dimming in TMR7 interrupt
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
294 return ; - done
203
dd9b167e82dc 1.64 (Fix ambient light for cR)
heinrichsweikamp
parents: 201
diff changeset
295
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
296 get_ambient_level1: ; using ambient sensor
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
297 banksel isr_backup ; back to ISR default bank
629
237931377539 3.07 stable release
heinrichsweikamp
parents: 628
diff changeset
298 clrf ADCON1 ; Vref+ = Vdd
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
299 movlw b'00011101' ; power on ADC, select AN7
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
300 rcall wait_adc
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
301 MOVII ADRESL,ambient_light
643
7d8a4c60ec1a 3.15 release
heinrichsweikamp
parents: 640
diff changeset
302 bcf ADCON0,0 ; power off ADC
0
heinrichsweikamp
parents:
diff changeset
303
643
7d8a4c60ec1a 3.15 release
heinrichsweikamp
parents: 640
diff changeset
304 btfsc ambient_light+1,7 ; result negative?
7d8a4c60ec1a 3.15 release
heinrichsweikamp
parents: 640
diff changeset
305 return ; Yes, skip this measurement
0
heinrichsweikamp
parents:
diff changeset
306 ; ambient_light:2 is between 4096 (direct sunlight) and about 200 (darkness)
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
307 ; first: divide by 16
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
308 movlw .4 ; divide by 2^4 = 16
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
309 get_ambient_level1_loop:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
310 bcf STATUS,C ; clear carry
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
311 rrcf ambient_light+1 ; rotate right high byte, carry into MSB, LSB into carry
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
312 rrcf ambient_light+0 ; rotate right low byte, carry into MSB, LSB into carry
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
313 decfsz WREG ; decrement counter, done?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
314 bra get_ambient_level1_loop ; NO - loop
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
315
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
316 ; result: ambient_light:2/16
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
317 ; now make sure to have value between ambient_light_low and ambient_light_max
0
heinrichsweikamp
parents:
diff changeset
318
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
319 movlw .254
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
320 tstfsz ambient_light+1 ; > 255 ?
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
321 movwf ambient_light+0 ; YES - avoid ADC clipping
0
heinrichsweikamp
parents:
diff changeset
322
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
323 incfsz ambient_light+0,W ; = 255 ?
643
7d8a4c60ec1a 3.15 release
heinrichsweikamp
parents: 640
diff changeset
324 bra get_ambient_level2 ; NO - continue
0
heinrichsweikamp
parents:
diff changeset
325
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
326 movlw .254
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
327 movwf ambient_light+0 ; avoid ADC clipping
0
heinrichsweikamp
parents:
diff changeset
328
heinrichsweikamp
parents:
diff changeset
329 get_ambient_level2:
645
070528a88715 3.16 release
heinrichsweikamp
parents: 643
diff changeset
330 movff brightness,isr_lo ; get brightness setting
0
heinrichsweikamp
parents:
diff changeset
331
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
332 btfsc RCSTA1,7 ; UART module on?
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
333 clrf isr_lo ; YES - set temporary to eco mode
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
334
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
335 incf isr_lo,F ; adjust 0-2 to 1-3
0
heinrichsweikamp
parents:
diff changeset
336
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
337 banksel HW_descriptor ; select bank where hardware descriptor and model variant are stored
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
338 movlw ambient_light_max_high_cr ; default to cR and 2 hardware brightest setting
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
339 btfss battery_gauge_available ; battery gauge available?
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
340 movlw ambient_light_max_high_15V ; NO - change to 1.5V battery brightest setting
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
341 btfsc battery_is_36v ; 3.6V battery in use?
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
342 movlw ambient_light_max_high_36V ; YES - change to 3.6V battery brightest setting
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
343 banksel isr_backup ; back to ISR default bank
0
heinrichsweikamp
parents:
diff changeset
344
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
345 dcfsnz isr_lo,F ; eco setting?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
346 movlw ambient_light_max_eco ; YES
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
347 dcfsnz isr_lo,F ; medium setting?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
348 movlw ambient_light_max_medium ; YES
0
heinrichsweikamp
parents:
diff changeset
349
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
350 incf ambient_light+0,F ; +1
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
351 cpfslt ambient_light+0 ; smaller than WREG?
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
352 movwf ambient_light+0 ; NO - set to max.
0
heinrichsweikamp
parents:
diff changeset
353
645
070528a88715 3.16 release
heinrichsweikamp
parents: 643
diff changeset
354 movff brightness,isr_lo ; get brightness setting
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
355 incf isr_lo,F ; adjust 0-2 to 1-3
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
356 movlw ambient_light_min_high ; default to highest setting
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
357 dcfsnz isr_lo,F ; eco setting?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
358 movlw ambient_light_min_eco ; YES
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
359 dcfsnz isr_lo,F ; medium setting?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
360 movlw ambient_light_min_medium ; YES
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
361 dcfsnz isr_lo,F ; highest setting?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
362 movlw ambient_light_min_high ; YES
0
heinrichsweikamp
parents:
diff changeset
363
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
364 cpfsgt ambient_light+0 ; bigger than WREG?
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
365 movwf ambient_light+0 ; NO - set to min
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
366
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
367 movff ambient_light+0,max_CCPR1L ; store value for dimming in TMR7 interrupt
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
368 return ; done
0
heinrichsweikamp
parents:
diff changeset
369
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
370
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
371 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
372 ; Read analog external Sensors
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
373 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
374 ; called from outside ISR only
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
375 ;
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
376 IFDEF _external_sensor
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
377
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
378 global get_analog_inputs
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
379 get_analog_inputs:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
380 bsf adc_is_running ; =1: the ADC is in use
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
381 btfsc screen_type3 ; display 3 ?
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
382 bra get_analog_inputs2 ; yes, skip here
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
383 btfsc TFT_PWM ; PWM active?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
384 bra get_analog_inputs ; YES - wait for PWM low
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
385
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
386 get_analog_inputs2:
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
387 movlw b'00100000' ; 2.048V Vref+ -> 1 LSB = 500 µV
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
388 movwf ADCON1 ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
389
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
390 ; Sensor 1
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
391 movlw b'00100001' ; power on ADC, select AN8
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
392 MOVII sensor1_mv,mpr ; get last sensor voltage
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
393 rcall get_analog_inputs_common ; update value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
394 MOVII mpr,sensor1_mv ; store new value
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
395
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
396 ; Sensor 2
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
397 movlw b'00100101' ; power on ADC, select AN9
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
398 MOVII sensor2_mv,mpr ; get last sensor voltage
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
399 rcall get_analog_inputs_common ; update value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
400 MOVII mpr,sensor2_mv ; store new value
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
401
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
402 ; Sensor 3
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
403 movlw b'00101001' ; power on ADC, select AN10
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
404 MOVII sensor3_mv,mpr ; get last sensor voltage
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
405 rcall get_analog_inputs_common ; update value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
406 MOVII mpr,sensor3_mv ; store new value
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
407
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
408 bcf ADCON0,0 ; power off ADC
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
409 bcf adc_is_running ; done with ADC
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
410 return ; done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
411
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
412 get_analog_inputs_common:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
413 rcall wait_adc ; wait for ADC
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
414 bcf STATUS,C ; clear carry flag
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
415 rrcf ADRESH,F ; divide /2
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
416 rrcf ADRESL,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
417 addwf mpr+0,F ; add to sensor_mv:2
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
418 movf ADRESH,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
419 addwfc mpr+1,F ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
420 bcf STATUS,C ; clear carry flag
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
421 rrcf mpr+1,F ; divide /2
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
422 rrcf mpr+0,F ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
423 movlw HIGH ignore_mv_above ; get upper limit of operational range
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
424 cpfsgt mpr+1 ; > limit ?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
425 bra get_analog_inputs_common_1 ; NO - ok to use
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
426 CLRI mpr ; YES - ignore this reading
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
427 return ; - done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
428 get_analog_inputs_common_1:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
429 tstfsz mpr+1 ; > 25.5 mV ?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
430 return ; YES - ok to use anyway
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
431 movlw ignore_mv_below ; NO - get lower limit of operational range
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
432 cpfsgt mpr+0 ; - > limit ?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
433 clrf mpr+0 ; NO - ignore this reading
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
434 return ; - done
0
heinrichsweikamp
parents:
diff changeset
435
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
436 ENDIF ; _external_sensor
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
437
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
438
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
439 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
440 ; Set the Sensitivity of the Piezo Buttons
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
441 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
442 ; called from outside ISR only, ~ 30 ms
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
443 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
444 global piezo_config
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
445 piezo_config:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
446 clrf TMR5H ; clear TMR5H first
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
447 clrf TMR5L ; clear TMR5L thereafter
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
448 bcf PIR5,TMR5IF ; clear timer 5 overrun flag, will take ~ 2 seconds to overrun after reset
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
449 bcf switch_right ; clear left-over button events
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
450 bcf switch_left ; ...
416
4389fe9673b2 NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents: 357
diff changeset
451 piezo_config0:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
452 btfsc switch_right ; user still pressing the right button?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
453 bra piezo_config ; YES - loop to wait for release
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
454 btfsc switch_left ; user still pressing the left button?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
455 bra piezo_config ; YES - loop to wait for release
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
456
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
457 btfss PIR5,TMR5IF ; timeout?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
458 bra piezo_config0 ; NO - not yet, loop
468
heinrichsweikamp
parents: 466
diff changeset
459
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
460 bcf INTCON,GIE ; disable all interrupts
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
461
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
462 movff opt_cR_button_right,WREG ; right button
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
463 btfsc flip_screen ; 180° rotation ?
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
464 movff opt_cR_button_left,WREG ; YES - left button
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
465 rcall piezo_config_tx ; send to button
343
34e2f5bdc5a2 BUGFIX: Rotate button sensitivity with screen (OSTC 2 and cR)
heinrichsweikamp
parents: 275
diff changeset
466
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
467 movff opt_cR_button_left,WREG ; left button
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
468 btfsc flip_screen ; 180° rotation ?
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
469 movff opt_cR_button_right,WREG ; YES - right button
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
470 rcall piezo_config_tx ; send to button
343
34e2f5bdc5a2 BUGFIX: Rotate button sensitivity with screen (OSTC 2 and cR)
heinrichsweikamp
parents: 275
diff changeset
471
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
472 movlw .20 ; reserved
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
473 rcall piezo_config_tx ; send to button
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
474 movlw .20 ; reserved
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
475 rcall piezo_config_tx ; send to button
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
476
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
477 bsf INTCON,GIE ; re-enable all interrupts
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
478 return ; done
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
479
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
480
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
481 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
482 ; Helper Function - send 1 Byte to the Piezo Buttons
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
483 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
484 piezo_config_tx:
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
485 movwf lo ; store byte to be sent
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
486 movlw .8 ; set up bit count
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
487 movwf hi ; ...
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
488 bcf TX3_PIEZO_CFG ; start bit
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
489 rcall piezo_config_wait_bit ; wait
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
490 piezo_config_tx_loop: ; LSB first
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
491 btfss lo,0 ; bit = 0 ?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
492 bcf TX3_PIEZO_CFG ; YES
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
493 btfsc lo,0 ; bit = 1 ?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
494 bsf TX3_PIEZO_CFG ; YES
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
495 rcall piezo_config_wait_bit ; wait
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
496 rrncf lo,F ; shift lo to access next bit
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
497 decfsz hi,F ; decrement bit counter, all done?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
498 bra piezo_config_tx_loop ; NO - loop
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
499 bsf TX3_PIEZO_CFG ; YES - stop bit
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
500 rcall piezo_config_wait_bit ; - wait
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
501 return ; - done
113
heinrichsweikamp
parents: 44
diff changeset
502
heinrichsweikamp
parents: 44
diff changeset
503 piezo_config_wait_bit:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
504 setf TMR5H ; set TMR5H first (to 255)
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
505 movlw .255-.26 ; 26 x 31.5 µs = 819 µs
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
506 movwf TMR5L ; set TMR5L thereafter
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
507 bcf PIR5,TMR5IF ; clear timer 5 overrun flag
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
508 piezo_config_wait_bit_loop:
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
509 btfss PIR5,TMR5IF ; timeout?
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
510 bra piezo_config_wait_bit_loop ; NO - loop
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
511 return ; YES - done
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
512
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
513
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
514 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
515 ; get the analog Switches
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
516 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
517 ; called from ISR and from sleep mode, returns in bank common
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
518 ;
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
519 global get_analog_switches
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
520 get_analog_switches:
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
521 btfsc analog_switches ; does the OSTC have analog switches?
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
522 bra get_analog_switches_1 ; YES
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
523
629
237931377539 3.07 stable release
heinrichsweikamp
parents: 628
diff changeset
524 get_analog_switches0:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
525 bcf analog_sw1_pressed ; clear flag for analog switch 1
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
526 bcf analog_sw2_pressed ; clear flag for analog switch 2
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
527 return ; done
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
528
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
529 get_analog_switches_1:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
530 btfsc adc_is_running ; ADC in use?
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
531 return ; YES - abort
650
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
532 btfsc cc_active ; NO - charging constant current?
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
533 bra get_analog_switches0 ; YES - abort (and clear both flags)
bc214815deb2 3.19/10.75 release
heinrichsweikamp
parents: 649
diff changeset
534 btfsc cv_active ; NO - charging constant voltage?
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
535 bra get_analog_switches0 ; YES - abort (and clear both flags)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
536
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
537 get_analog_switches_2:
640
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
538 ; reset the latch register in case it's externally pulled down. mH This is a test
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
539 bsf power_sw1 ; switch on power supply for switch 1
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
540 bsf power_sw2 ; switch on power supply for switch 2
8c1f1f334275 3.13 release
heinrichsweikamp
parents: 636
diff changeset
541
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
542 bsf adc_is_running ; flag that ADC is in use
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
543 bcf ADCON2,ADFM ; left justified
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
544 clrf ADCON1 ;
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
545 movlw b'00100101' ; power on ADC, select AN9
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
546 rcall wait_adc ; wait for ADC
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
547
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
548 banksel isr_backup ; select bank ISR data
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
549
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
550 movlw .250 ; set upper limit
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
551 cpfslt ADRESH ; above upper limit?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
552 movff analog_sw2,ADRESH ; YES - use (last) average instead
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
553
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
554 movf ADRESH,W ; get ADC result (high byte)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
555 addwf analog_sw2_raw+0 ; add to averaging register
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
556 movlw .0 ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
557 addwfc analog_sw2_raw+1 ; ...
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
558 decfsz analog_counter,F ; continue averaging?
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
559 bra get_analog_switches_2a ; YES
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
560
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
561 ; compute average - divide by 16
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
562 swapf analog_sw2_raw+1,F ; swap nibbles in high byte
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
563 movlw b'11110000' ; keep only upper nibble
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
564 andwf analog_sw2_raw+1,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
565 movwf analog_sw2 ; copy ex lower nibble of high byte to upper nibble of result
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
566 swapf analog_sw2_raw+0,F ; swap nibble in low byte
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
567 movlw b'00001111' ; keep only lower nibble
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
568 andwf analog_sw2_raw+0,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
569 iorwf analog_sw2,F ; copy ex upper nibble of low byte to lower nibble of result
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
570
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
571 clrf analog_sw2_raw+1 ; reset average registers
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
572 clrf analog_sw2_raw+0 ; ...
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
573
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
574 get_analog_switches_2a:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
575 bcf analog_sw2_pressed ; default to not pressed
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
576 movff opt_cR_button_left,WREG ; get button sensitivity (20-100)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
577 bcf STATUS,C ; clear carry bit
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
578 rrcf WREG ; /2 -> 10-50
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
579 bcf STATUS,C ; clear carry bit
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
580 rrcf WREG ; /4 -> 5-25
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
581 decf WREG,W ; -1
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
582 decf WREG,W ; -1
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
583 decf WREG,W ; -1 -> 2-22
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
584 btfss button_polarity,1 ; (1= normal, 0=inverted)
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
585 bra get_analog_switches_sw2_inv ; 0
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
586 addwf analog_sw2,W ; 1 - add average (~128)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
587 cpfsgt ADRESH ; - pressed?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
588 bra get_analog_switches_3 ; NO - continue with other button
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
589 bra get_analog_switches_sw2_pressed ; YES - (left button normal)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
590
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
591 get_analog_switches_sw2_inv:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
592 subwf analog_sw2,W ; subtract average (~128)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
593 cpfslt ADRESH ; pressed?
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
594 bra get_analog_switches_3 ; NO - continue with other button
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
595 ;bra get_analog_switches_sw2_pressed ; YES - (left button inverted)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
596
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
597 get_analog_switches_sw2_pressed:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
598 bsf analog_sw2_pressed ; set left button as pressed
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
599
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
600 get_analog_switches_3:
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
601 movlw b'00101001' ; power on ADC, select AN10
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
602 rcall wait_adc ; wait on ADC
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
603
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
604 movlw .250 ; set upper limit
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
605 cpfslt ADRESH ; above upper limit?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
606 movff analog_sw1,ADRESH ; YES - use (last) average instead
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
607
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
608 movf ADRESH,W ; get ADC result (high byte)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
609 addwf analog_sw1_raw+0 ; add to averaging register
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
610 movlw .0 ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
611 addwfc analog_sw1_raw+1 ; ...
582
b455b31ce022 work on 2.97 stable
heinrichsweikamp
parents: 475
diff changeset
612 tstfsz analog_counter ; continue averaging?
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
613 bra get_analog_switches_3a ; YES
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
614
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
615 ; compute average - divide by 16
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
616 swapf analog_sw1_raw+1,F ; swap nibbles in high byte
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
617 movlw b'11110000' ; keep only upper nibble
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
618 andwf analog_sw1_raw+1,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
619 movwf analog_sw1 ; copy ex lower nibble of high byte to upper nibble of result
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
620 swapf analog_sw1_raw+0,F ; swap nibble in low byte
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
621 movlw b'00001111' ; keep only lower nibble
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
622 andwf analog_sw1_raw+0,W ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
623 iorwf analog_sw1,F ; copy ex upper nibble of low byte to lower nibble of result
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
624
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
625 clrf analog_sw1_raw+1 ; reset average registers
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
626 clrf analog_sw1_raw+0 ; ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
627
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
628 ; set up averaging counter for next call-up
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
629 movlw .16 ; 16 averaging rounds
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
630 movwf analog_counter ; ...
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
631
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
632 get_analog_switches_3a:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
633 bcf analog_sw1_pressed ; default to not pressed
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
634 movff opt_cR_button_right,WREG ; 20-100
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
635 bcf STATUS,C ; clear carry bit
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
636 rrcf WREG ; /2 -> 10-50
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
637 bcf STATUS,C ; clear carry bit
604
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
638 rrcf WREG ; /2 -> 5-25
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
639 decf WREG,W ; -1
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
640 decf WREG,W ; -1
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
641 decf WREG,W ; -1 -> 2-22
ca4556fb60b9 bump to 2.99beta, work on 3.00 stable
heinrichsweikamp
parents: 603
diff changeset
642 btfss button_polarity,0 ; (1= normal, 0=inverted)
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
643 bra get_analog_switches_sw1_inv ; 0
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
644 addwf analog_sw1,W ; 1 - add to average (~128)
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
645 cpfsgt ADRESH ; - pressed?
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
646 bra get_analog_switches_4 ; NO - continue with clean-up
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
647 bra get_analog_switches_sw1_pressed ; YES - (right button normal)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
648
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
649 get_analog_switches_sw1_inv:
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
650 subwf analog_sw1,W ; subtract from average (~128)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
651 cpfslt ADRESH ; pressed?
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
652 bra get_analog_switches_4 ; NO - continue with clean-up
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
653 ;bra get_analog_switches_sw1_pressed ; YES - (right button inverted)
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
654
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
655 get_analog_switches_sw1_pressed:
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
656 bsf analog_sw1_pressed ; set right button as pressed
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
657
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
658 get_analog_switches_4:
631
185ba2f91f59 3.09 beta 1 release
heinrichsweikamp
parents: 629
diff changeset
659 bsf ADCON2,ADFM ; restore to right justified
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
660 bcf adc_is_running ; flag ADC not in use any more
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
661
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
662 banksel common ; back to bank common
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
663
623
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
664 btfsc analog_sw1_pressed ; right button pressed?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
665 return ; YES - done
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
666 btfsc analog_sw2_pressed ; left button pressed?
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
667 return ; YES - done
c40025d8e750 3.03 beta released
heinrichsweikamp
parents: 615
diff changeset
668 setf TMR1H ; NO to both - no button pressed, set timer1 to overflow quickly
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
669 setf TMR1L ; - ...
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
670 return ; - done
448
aadfe9f2edaf work on new battery options
heinrichsweikamp
parents: 416
diff changeset
671
634
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
672 ;-----------------------------------------------------------------------------
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
673
4050675965ea 3.10 stable release
heinrichsweikamp
parents: 631
diff changeset
674 END