Mercurial > public > hwos_code
diff src/testmode.asm @ 0:11d4fc797f74
init
author | heinrichsweikamp |
---|---|
date | Wed, 24 Apr 2013 19:22:45 +0200 |
parents | |
children | ec4d8503ec45 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/testmode.asm Wed Apr 24 19:22:45 2013 +0200 @@ -0,0 +1,196 @@ +;============================================================================= +; +; File tesmode.asm +; +; Test Mode for Hardware check +; +; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. +;============================================================================= +; HISTORY +; 2012-10-31 : [mH] Creation + +#include "ostc3.inc" ; Mandatory header +#include "shared_definitions.h" ; Mailbox from/to p2_deco.c +#include "start.inc" +#include "tft.inc" +#include "tft_outputs.inc" +#include "isr.inc" +#include "adc_lightsensor.inc" +#include "strings.inc" +#include "sleepmode.inc" +#include "wait.inc" ; speed_* +#include "mcp.inc" ; RX +#include "i2c.inc" +#include "surfmode.inc" +#include "math.inc" +#include "eeprom_rs232.inc" + + extern compass + extern compass_filter + extern compass_filter_init + extern compass_reset_calibration + extern compass_add_calibration + extern compass_solve_calibration + +testmode CODE + +;============================================================================= +; Boot tasks for all modes + global testloop +testloop: + call speed_normal + bcf no_sensor_int ; Sensor ISR + + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM output to GND + call TFT_boot ; Initialize TFT (includes clear screen) + call enable_ir ; Enable IR-Port + WIN_TOP .0 + WIN_LEFT .0 + WIN_FONT FT_SMALL + WIN_INVERT .0 ; Init new Wordprocessor + call TFT_standard_color + call mcp_reset_rssi ; Setup RX + call TFT_Display_FadeIn + + call I2C_init_compass + call I2C_init_accelerometer + + ; Init compass/accel filtering value. + call I2C_RX_compass + call I2C_RX_accelerometer + call compass_filter_init + + clrf timeout_counter2 + clrf timeout_counter3 + bcf premenu ; clear premenu flag + bcf menubit ; clear menu flag + + bcf switch_left + bcf switch_right + +testloop_loop: + btfss onesecupdate ; do every second tasks? + bra testloop_loop2 ; no, loop + +; One Second tasks + call speed_normal + call I2C_RX_compass ; Test Compass + call I2C_RX_accelerometer ; Test Accelerometer + call compass_filter ; Filter Raw compass + accel readings. + banksel common + + ; Make a second measure and filter, to show faster reactions. + call I2C_RX_compass ; Test Compass + call I2C_RX_accelerometer ; Test Accelerometer + call compass_filter ; Filter Raw compass + accel readings. + call compass ; Do compass corrections. + banksel common + + call TFT_update_raw_data + movlw .240 + call timeout_testmode ; check timeout + + bcf onesecupdate ; every second tasks done + +testloop_loop2: +; Tasks approx. every 50ms for all modes + bcf LEDg + btfsc vusb_in + bsf LEDg + +; Mode tasks + extern surfloop + btfsc switch_left + goto surfloop ; Exit + + btfsc switch_right + goto compass_calibration_loop + + btfsc sleepmode ; Sleepmode active? + goto sleeploop ; Yes, switch into sleepmode! + + bra testloop_loop ; loop testmode + + + global compass_calibration_loop +compass_calibration_loop: ; Compass calibration + bsf no_sensor_int ; No Sensor ISR + call I2C_init_accelerometer + call I2C_init_compass_fast + call TFT_ClearScreen + + ; Mask + WIN_COLOR color_greenish + WIN_SMALL .16,.0 + STRCPY_TEXT_PRINT tCompassMenu + call TFT_standard_color + WIN_SMALL .0,.215 + STRCPY_TEXT_PRINT tExit + + clrf timeout_counter2 + clrf timeout_counter3 + + call speed_fastest + call I2C_RX_compass ; read compass + call I2C_RX_accelerometer ; read Accelerometer + call compass_filter_init ; set DX_f values + call compass_reset_calibration ; Reset CX_f values + banksel common + +compass_calibration_loop2: + call I2C_RX_compass ; read compass + call I2C_RX_accelerometer ; Test Accelerometer + call compass_filter ; Filter compass raw data + banksel common + + ; Twice + call I2C_RX_compass ; read compass + call I2C_RX_accelerometer ; Test Accelerometer + call compass_filter ; Filter compass raw data + banksel common +; +; ; Three +; call I2C_RX_compass ; read compass +; call I2C_RX_accelerometer ; Test Accelerometer +; call compass_filter ; Filter compass raw data +; banksel common +; +; ; Four times to get cleaner values +; call I2C_RX_compass ; read compass +; call I2C_RX_accelerometer ; Test Accelerometer +; call compass_filter ; Filter compass raw data + + ; And register only one value out of four: + call compass_add_calibration ; check and store new max/min values + banksel common + + call TFT_compass_fast ; show values +; btg LEDg ; Show read-out interval + + btfsc sleepmode ; Sleepmode active? + bra compass_calibration_exit ; Yes, exit + + btfsc switch_left ; Button pressed? + bra compass_calibration_exit ; Yes, exit + + btfss onesecupdate ; do every second tasks? + bra compass_calibration_loop2 ; no, loop here + + movlw .240 + call timeout_testmode ; check timeout + bcf onesecupdate ; clear flag + + bra compass_calibration_loop2 ; loop here + +compass_calibration_exit: + call compass_solve_calibration + banksel common + extern option_save_all + call option_save_all ; save all settings into EEPROM + bcf sleepmode ; Clear the flag before exiting to surfacemode + movlw .6 + movwf menupos3 ; Set to compass view... + goto surfloop ; ...and exit + + END \ No newline at end of file