annotate src/testmode.asm @ 64:40a5cc0664ed

Merge
author heinrichsweikamp
date Fri, 10 Jan 2014 10:13:53 +0100
parents ec4d8503ec45
children 7815bf21d353
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
heinrichsweikamp
parents:
diff changeset
1 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
2 ;
heinrichsweikamp
parents:
diff changeset
3 ; File tesmode.asm
heinrichsweikamp
parents:
diff changeset
4 ;
heinrichsweikamp
parents:
diff changeset
5 ; Test Mode for Hardware check
heinrichsweikamp
parents:
diff changeset
6 ;
heinrichsweikamp
parents:
diff changeset
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
heinrichsweikamp
parents:
diff changeset
8 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
9 ; HISTORY
heinrichsweikamp
parents:
diff changeset
10 ; 2012-10-31 : [mH] Creation
heinrichsweikamp
parents:
diff changeset
11
heinrichsweikamp
parents:
diff changeset
12 #include "ostc3.inc" ; Mandatory header
heinrichsweikamp
parents:
diff changeset
13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c
heinrichsweikamp
parents:
diff changeset
14 #include "start.inc"
heinrichsweikamp
parents:
diff changeset
15 #include "tft.inc"
heinrichsweikamp
parents:
diff changeset
16 #include "tft_outputs.inc"
heinrichsweikamp
parents:
diff changeset
17 #include "isr.inc"
heinrichsweikamp
parents:
diff changeset
18 #include "adc_lightsensor.inc"
heinrichsweikamp
parents:
diff changeset
19 #include "strings.inc"
heinrichsweikamp
parents:
diff changeset
20 #include "sleepmode.inc"
heinrichsweikamp
parents:
diff changeset
21 #include "wait.inc" ; speed_*
heinrichsweikamp
parents:
diff changeset
22 #include "mcp.inc" ; RX
heinrichsweikamp
parents:
diff changeset
23 #include "i2c.inc"
heinrichsweikamp
parents:
diff changeset
24 #include "surfmode.inc"
heinrichsweikamp
parents:
diff changeset
25 #include "math.inc"
heinrichsweikamp
parents:
diff changeset
26 #include "eeprom_rs232.inc"
heinrichsweikamp
parents:
diff changeset
27
heinrichsweikamp
parents:
diff changeset
28 extern compass
heinrichsweikamp
parents:
diff changeset
29 extern compass_filter
heinrichsweikamp
parents:
diff changeset
30 extern compass_filter_init
heinrichsweikamp
parents:
diff changeset
31 extern compass_reset_calibration
heinrichsweikamp
parents:
diff changeset
32 extern compass_add_calibration
heinrichsweikamp
parents:
diff changeset
33 extern compass_solve_calibration
heinrichsweikamp
parents:
diff changeset
34
heinrichsweikamp
parents:
diff changeset
35 testmode CODE
heinrichsweikamp
parents:
diff changeset
36
heinrichsweikamp
parents:
diff changeset
37 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
38 ; Boot tasks for all modes
heinrichsweikamp
parents:
diff changeset
39 global testloop
heinrichsweikamp
parents:
diff changeset
40 testloop:
heinrichsweikamp
parents:
diff changeset
41 call speed_normal
heinrichsweikamp
parents:
diff changeset
42 bcf no_sensor_int ; Sensor ISR
heinrichsweikamp
parents:
diff changeset
43
heinrichsweikamp
parents:
diff changeset
44 clrf CCP1CON ; stop PWM
heinrichsweikamp
parents:
diff changeset
45 bcf PORTC,2 ; Pull PWM output to GND
heinrichsweikamp
parents:
diff changeset
46 call TFT_boot ; Initialize TFT (includes clear screen)
heinrichsweikamp
parents:
diff changeset
47 call enable_ir ; Enable IR-Port
heinrichsweikamp
parents:
diff changeset
48 WIN_TOP .0
heinrichsweikamp
parents:
diff changeset
49 WIN_LEFT .0
heinrichsweikamp
parents:
diff changeset
50 WIN_FONT FT_SMALL
heinrichsweikamp
parents:
diff changeset
51 WIN_INVERT .0 ; Init new Wordprocessor
heinrichsweikamp
parents:
diff changeset
52 call TFT_standard_color
heinrichsweikamp
parents:
diff changeset
53 call TFT_Display_FadeIn
heinrichsweikamp
parents:
diff changeset
54
heinrichsweikamp
parents:
diff changeset
55 call I2C_init_compass
heinrichsweikamp
parents:
diff changeset
56 call I2C_init_accelerometer
heinrichsweikamp
parents:
diff changeset
57
heinrichsweikamp
parents:
diff changeset
58 ; Init compass/accel filtering value.
heinrichsweikamp
parents:
diff changeset
59 call I2C_RX_compass
heinrichsweikamp
parents:
diff changeset
60 call I2C_RX_accelerometer
heinrichsweikamp
parents:
diff changeset
61 call compass_filter_init
heinrichsweikamp
parents:
diff changeset
62
heinrichsweikamp
parents:
diff changeset
63 clrf timeout_counter2
heinrichsweikamp
parents:
diff changeset
64 clrf timeout_counter3
heinrichsweikamp
parents:
diff changeset
65 bcf premenu ; clear premenu flag
heinrichsweikamp
parents:
diff changeset
66 bcf menubit ; clear menu flag
heinrichsweikamp
parents:
diff changeset
67
heinrichsweikamp
parents:
diff changeset
68 bcf switch_left
heinrichsweikamp
parents:
diff changeset
69 bcf switch_right
heinrichsweikamp
parents:
diff changeset
70
heinrichsweikamp
parents:
diff changeset
71 testloop_loop:
heinrichsweikamp
parents:
diff changeset
72 btfss onesecupdate ; do every second tasks?
heinrichsweikamp
parents:
diff changeset
73 bra testloop_loop2 ; no, loop
heinrichsweikamp
parents:
diff changeset
74
heinrichsweikamp
parents:
diff changeset
75 ; One Second tasks
heinrichsweikamp
parents:
diff changeset
76 call speed_normal
heinrichsweikamp
parents:
diff changeset
77 call I2C_RX_compass ; Test Compass
heinrichsweikamp
parents:
diff changeset
78 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
79 call compass_filter ; Filter Raw compass + accel readings.
heinrichsweikamp
parents:
diff changeset
80 banksel common
heinrichsweikamp
parents:
diff changeset
81
heinrichsweikamp
parents:
diff changeset
82 ; Make a second measure and filter, to show faster reactions.
heinrichsweikamp
parents:
diff changeset
83 call I2C_RX_compass ; Test Compass
heinrichsweikamp
parents:
diff changeset
84 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
85 call compass_filter ; Filter Raw compass + accel readings.
heinrichsweikamp
parents:
diff changeset
86 call compass ; Do compass corrections.
heinrichsweikamp
parents:
diff changeset
87 banksel common
heinrichsweikamp
parents:
diff changeset
88
heinrichsweikamp
parents:
diff changeset
89 call TFT_update_raw_data
heinrichsweikamp
parents:
diff changeset
90 movlw .240
heinrichsweikamp
parents:
diff changeset
91 call timeout_testmode ; check timeout
heinrichsweikamp
parents:
diff changeset
92
heinrichsweikamp
parents:
diff changeset
93 bcf onesecupdate ; every second tasks done
heinrichsweikamp
parents:
diff changeset
94
heinrichsweikamp
parents:
diff changeset
95 testloop_loop2:
heinrichsweikamp
parents:
diff changeset
96 ; Tasks approx. every 50ms for all modes
heinrichsweikamp
parents:
diff changeset
97 bcf LEDg
heinrichsweikamp
parents:
diff changeset
98 btfsc vusb_in
heinrichsweikamp
parents:
diff changeset
99 bsf LEDg
heinrichsweikamp
parents:
diff changeset
100
heinrichsweikamp
parents:
diff changeset
101 ; Mode tasks
heinrichsweikamp
parents:
diff changeset
102 extern surfloop
heinrichsweikamp
parents:
diff changeset
103 btfsc switch_left
heinrichsweikamp
parents:
diff changeset
104 goto surfloop ; Exit
heinrichsweikamp
parents:
diff changeset
105
heinrichsweikamp
parents:
diff changeset
106 btfsc switch_right
heinrichsweikamp
parents:
diff changeset
107 goto compass_calibration_loop
heinrichsweikamp
parents:
diff changeset
108
heinrichsweikamp
parents:
diff changeset
109 btfsc sleepmode ; Sleepmode active?
heinrichsweikamp
parents:
diff changeset
110 goto sleeploop ; Yes, switch into sleepmode!
heinrichsweikamp
parents:
diff changeset
111
heinrichsweikamp
parents:
diff changeset
112 bra testloop_loop ; loop testmode
heinrichsweikamp
parents:
diff changeset
113
heinrichsweikamp
parents:
diff changeset
114
heinrichsweikamp
parents:
diff changeset
115 global compass_calibration_loop
heinrichsweikamp
parents:
diff changeset
116 compass_calibration_loop: ; Compass calibration
heinrichsweikamp
parents:
diff changeset
117 bsf no_sensor_int ; No Sensor ISR
heinrichsweikamp
parents:
diff changeset
118 call I2C_init_accelerometer
heinrichsweikamp
parents:
diff changeset
119 call I2C_init_compass_fast
heinrichsweikamp
parents:
diff changeset
120 call TFT_ClearScreen
heinrichsweikamp
parents:
diff changeset
121
heinrichsweikamp
parents:
diff changeset
122 ; Mask
heinrichsweikamp
parents:
diff changeset
123 WIN_COLOR color_greenish
heinrichsweikamp
parents:
diff changeset
124 WIN_SMALL .16,.0
heinrichsweikamp
parents:
diff changeset
125 STRCPY_TEXT_PRINT tCompassMenu
heinrichsweikamp
parents:
diff changeset
126 call TFT_standard_color
heinrichsweikamp
parents:
diff changeset
127 WIN_SMALL .0,.215
heinrichsweikamp
parents:
diff changeset
128 STRCPY_TEXT_PRINT tExit
heinrichsweikamp
parents:
diff changeset
129
heinrichsweikamp
parents:
diff changeset
130 clrf timeout_counter2
heinrichsweikamp
parents:
diff changeset
131 clrf timeout_counter3
heinrichsweikamp
parents:
diff changeset
132
heinrichsweikamp
parents:
diff changeset
133 call speed_fastest
heinrichsweikamp
parents:
diff changeset
134 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
135 call I2C_RX_accelerometer ; read Accelerometer
heinrichsweikamp
parents:
diff changeset
136 call compass_filter_init ; set DX_f values
heinrichsweikamp
parents:
diff changeset
137 call compass_reset_calibration ; Reset CX_f values
heinrichsweikamp
parents:
diff changeset
138 banksel common
heinrichsweikamp
parents:
diff changeset
139
heinrichsweikamp
parents:
diff changeset
140 compass_calibration_loop2:
heinrichsweikamp
parents:
diff changeset
141 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
142 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
143 call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
144 banksel common
heinrichsweikamp
parents:
diff changeset
145
heinrichsweikamp
parents:
diff changeset
146 ; Twice
heinrichsweikamp
parents:
diff changeset
147 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
148 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
149 call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
150 banksel common
heinrichsweikamp
parents:
diff changeset
151 ;
heinrichsweikamp
parents:
diff changeset
152 ; ; Three
heinrichsweikamp
parents:
diff changeset
153 ; call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
154 ; call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
155 ; call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
156 ; banksel common
heinrichsweikamp
parents:
diff changeset
157 ;
heinrichsweikamp
parents:
diff changeset
158 ; ; Four times to get cleaner values
heinrichsweikamp
parents:
diff changeset
159 ; call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
160 ; call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
161 ; call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
162
heinrichsweikamp
parents:
diff changeset
163 ; And register only one value out of four:
heinrichsweikamp
parents:
diff changeset
164 call compass_add_calibration ; check and store new max/min values
heinrichsweikamp
parents:
diff changeset
165 banksel common
heinrichsweikamp
parents:
diff changeset
166
heinrichsweikamp
parents:
diff changeset
167 call TFT_compass_fast ; show values
heinrichsweikamp
parents:
diff changeset
168 ; btg LEDg ; Show read-out interval
heinrichsweikamp
parents:
diff changeset
169
heinrichsweikamp
parents:
diff changeset
170 btfsc sleepmode ; Sleepmode active?
heinrichsweikamp
parents:
diff changeset
171 bra compass_calibration_exit ; Yes, exit
heinrichsweikamp
parents:
diff changeset
172
heinrichsweikamp
parents:
diff changeset
173 btfsc switch_left ; Button pressed?
heinrichsweikamp
parents:
diff changeset
174 bra compass_calibration_exit ; Yes, exit
heinrichsweikamp
parents:
diff changeset
175
heinrichsweikamp
parents:
diff changeset
176 btfss onesecupdate ; do every second tasks?
heinrichsweikamp
parents:
diff changeset
177 bra compass_calibration_loop2 ; no, loop here
heinrichsweikamp
parents:
diff changeset
178
heinrichsweikamp
parents:
diff changeset
179 movlw .240
heinrichsweikamp
parents:
diff changeset
180 call timeout_testmode ; check timeout
heinrichsweikamp
parents:
diff changeset
181 bcf onesecupdate ; clear flag
heinrichsweikamp
parents:
diff changeset
182
heinrichsweikamp
parents:
diff changeset
183 bra compass_calibration_loop2 ; loop here
heinrichsweikamp
parents:
diff changeset
184
heinrichsweikamp
parents:
diff changeset
185 compass_calibration_exit:
heinrichsweikamp
parents:
diff changeset
186 call compass_solve_calibration
heinrichsweikamp
parents:
diff changeset
187 banksel common
heinrichsweikamp
parents:
diff changeset
188 extern option_save_all
heinrichsweikamp
parents:
diff changeset
189 call option_save_all ; save all settings into EEPROM
heinrichsweikamp
parents:
diff changeset
190 bcf sleepmode ; Clear the flag before exiting to surfacemode
heinrichsweikamp
parents:
diff changeset
191 movlw .6
heinrichsweikamp
parents:
diff changeset
192 movwf menupos3 ; Set to compass view...
heinrichsweikamp
parents:
diff changeset
193 goto surfloop ; ...and exit
heinrichsweikamp
parents:
diff changeset
194
heinrichsweikamp
parents:
diff changeset
195 END