Minor fixes

Dependencies:   LSM9DS1_Library SDFileSystem mbed nrf51_rtc

Fork of LSM303DLHTest by Toshihisa T

Committer:
afmiee
Date:
Tue Jul 26 21:18:15 2016 +0000
Revision:
10:e7ab0493ed9f
Parent:
9:61fcd186ac50
Child:
11:a246c67d44b0
Works automatically, still needs the thresholds and durations to be tuned. Uses accelerator interrupt on INT1 and inactivity on INT2.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
afmiee 5:b1a689c55f59 1 // Latch Inc.
afmiee 5:b1a689c55f59 2 // Antonio F Mondragon
afmiee 5:b1a689c55f59 3 // 20160714
afmiee 5:b1a689c55f59 4 // for the Adafruit 9DOF Modulke and the Sparkfun microSD card shield
tosihisa 0:750784997b84 5
tosihisa 0:750784997b84 6 #include "mbed.h"
afmiee 6:9db9f4bfaf98 7 #include "LSM9DS1.h"
afmiee 5:b1a689c55f59 8 #include "SDFileSystem.h"
afmiee 5:b1a689c55f59 9 #include "nrf51_rtc.h"
afmiee 10:e7ab0493ed9f 10 //#include "utilities.h"
afmiee 5:b1a689c55f59 11
afmiee 5:b1a689c55f59 12 #define M_PI 3.14158
afmiee 10:e7ab0493ed9f 13 #define DEBUG 1
afmiee 10:e7ab0493ed9f 14
afmiee 10:e7ab0493ed9f 15 // define threshold and Duration registers for interrupts
afmiee 10:e7ab0493ed9f 16 #define ACT_THS_REG 0x10 // 0x04
afmiee 10:e7ab0493ed9f 17 #define ACT_DUR_REG 0x02 // 0x05
afmiee 5:b1a689c55f59 18
afmiee 10:e7ab0493ed9f 19 #define INT_GEN_THS_X_XL_REG 0x10 // 0x07
afmiee 10:e7ab0493ed9f 20 #define INT_GEN_THS_Y_YL_REG 0xFF // 0x08
afmiee 10:e7ab0493ed9f 21 #define INT_GEN_THS_Z_XL_REG 0x10 // 0x09
afmiee 10:e7ab0493ed9f 22 #define INT_GEN_DUR_XL_REG 0x00 // 0x0A
afmiee 10:e7ab0493ed9f 23
afmiee 10:e7ab0493ed9f 24 #define INT_GEN_THS_XHL_G_REG 0x0300 // 0x31-32
afmiee 10:e7ab0493ed9f 25 #define INT_GEN_THS_YHL_G_REG 0x0300 // 0x33-34
afmiee 10:e7ab0493ed9f 26 #define INT_GEN_THS_ZHL_G_REG 0x0300 // 0x35-36
afmiee 10:e7ab0493ed9f 27 #define INT_GEN_DUR_G_REG 0x02 // 0x37
afmiee 10:e7ab0493ed9f 28
afmiee 10:e7ab0493ed9f 29 typedef unsigned long int ulint;
afmiee 5:b1a689c55f59 30 // Create objects
afmiee 5:b1a689c55f59 31 Serial debug(USBTX,USBRX);
afmiee 5:b1a689c55f59 32 // For Nordic
afmiee 6:9db9f4bfaf98 33 LSM9DS1 lol(p30, p7, 0xD6, 0x3C);
afmiee 7:cbfdcc57f110 34 I2C i2c(p30, p7);
afmiee 10:e7ab0493ed9f 35
afmiee 5:b1a689c55f59 36 // Create the SD filesystem
afmiee 5:b1a689c55f59 37 SDFileSystem sd(p25, p28, p29, p20, "sd"); // MOSI, MISO, SCLK, SSEL
afmiee 5:b1a689c55f59 38
afmiee 5:b1a689c55f59 39 // Create a ticker to use the nRF51 RTC
afmiee 5:b1a689c55f59 40 Ticker flipper;
afmiee 5:b1a689c55f59 41
afmiee 5:b1a689c55f59 42 // Assign interrupts to switches
afmiee 9:61fcd186ac50 43 InterruptIn int1(p12); // Start sampling
afmiee 9:61fcd186ac50 44 InterruptIn int2(p13); // Stop sampoling
afmiee 5:b1a689c55f59 45
afmiee 5:b1a689c55f59 46 // LED definitions
afmiee 5:b1a689c55f59 47 DigitalOut led1(LED1);
afmiee 5:b1a689c55f59 48 DigitalOut led2(LED2);
afmiee 9:61fcd186ac50 49 DigitalOut dbg1(p16);
afmiee 9:61fcd186ac50 50 DigitalOut dbg2(p17);
afmiee 5:b1a689c55f59 51
afmiee 5:b1a689c55f59 52 // Global variables
afmiee 5:b1a689c55f59 53 int start = 0;
afmiee 5:b1a689c55f59 54 int stop = 0;
afmiee 10:e7ab0493ed9f 55 time_t seconds;
afmiee 5:b1a689c55f59 56
afmiee 10:e7ab0493ed9f 57 FILE *fpA;
afmiee 10:e7ab0493ed9f 58 FILE *fpG;
afmiee 10:e7ab0493ed9f 59 FILE *fpM;
afmiee 7:cbfdcc57f110 60
afmiee 10:e7ab0493ed9f 61 char filename[80];
afmiee 10:e7ab0493ed9f 62 char secs_str[80];
afmiee 7:cbfdcc57f110 63
afmiee 7:cbfdcc57f110 64 uint8_t I2CreadByte(uint8_t address, uint8_t subAddress)
afmiee 7:cbfdcc57f110 65 {
afmiee 7:cbfdcc57f110 66 char data;
afmiee 7:cbfdcc57f110 67 char temp= subAddress;
afmiee 7:cbfdcc57f110 68
afmiee 7:cbfdcc57f110 69 i2c.write(address, &temp, 1);
afmiee 7:cbfdcc57f110 70 int a = i2c.read(address, &data, 1);
afmiee 7:cbfdcc57f110 71 return data;
afmiee 5:b1a689c55f59 72 }
afmiee 5:b1a689c55f59 73
afmiee 8:8f4d7f1c588f 74 uint8_t I2CreadBytes(uint8_t address, uint8_t subAddress, uint8_t * dest, uint8_t count)
afmiee 8:8f4d7f1c588f 75 {
afmiee 8:8f4d7f1c588f 76 int i;
afmiee 8:8f4d7f1c588f 77 char temp_dest[count];
afmiee 8:8f4d7f1c588f 78 char temp = subAddress;
afmiee 8:8f4d7f1c588f 79 i2c.write(address, &temp, 1);
afmiee 8:8f4d7f1c588f 80 i2c.read(address, temp_dest, count);
afmiee 8:8f4d7f1c588f 81
afmiee 8:8f4d7f1c588f 82 //i2c doesn't take uint8_ts, but rather chars so do this nasty af conversion
afmiee 8:8f4d7f1c588f 83 for (i=0; i < count; i++) {
afmiee 8:8f4d7f1c588f 84 dest[i] = temp_dest[i];
afmiee 8:8f4d7f1c588f 85 }
afmiee 8:8f4d7f1c588f 86 return count;
afmiee 8:8f4d7f1c588f 87 }
afmiee 10:e7ab0493ed9f 88 //***********************************************************
afmiee 10:e7ab0493ed9f 89 // file_rename: renames a file (via copy & delete).
afmiee 10:e7ab0493ed9f 90 // Moves data instead of adjusting the file name in the
afmiee 10:e7ab0493ed9f 91 // file directory. Checks to insure the file was renamed.
afmiee 10:e7ab0493ed9f 92 // Returns -1 = error; 0 = success
afmiee 10:e7ab0493ed9f 93 //***********************************************************
afmiee 10:e7ab0493ed9f 94 int file_rename(const char *oldfname, const char *newfname)
afmiee 10:e7ab0493ed9f 95 {
afmiee 10:e7ab0493ed9f 96 int retval = 0;
afmiee 10:e7ab0493ed9f 97 int ch;
afmiee 8:8f4d7f1c588f 98
afmiee 10:e7ab0493ed9f 99 FILE *fpold = fopen(oldfname, "r"); // src file
afmiee 10:e7ab0493ed9f 100 FILE *fpnew = fopen(newfname, "w"); // dest file
afmiee 8:8f4d7f1c588f 101
afmiee 10:e7ab0493ed9f 102 while (1) { // Copy src to dest
afmiee 10:e7ab0493ed9f 103 ch = fgetc(fpold); // until src EOF read.
afmiee 10:e7ab0493ed9f 104 if (ch == EOF) break;
afmiee 10:e7ab0493ed9f 105 fputc(ch, fpnew);
afmiee 10:e7ab0493ed9f 106 }
afmiee 10:e7ab0493ed9f 107
afmiee 10:e7ab0493ed9f 108 fclose(fpnew);
afmiee 10:e7ab0493ed9f 109 fclose(fpold);
afmiee 10:e7ab0493ed9f 110
afmiee 10:e7ab0493ed9f 111 fpnew = fopen(newfname, "r"); // Reopen dest to insure
afmiee 10:e7ab0493ed9f 112 if(fpnew == NULL) { // that it was created.
afmiee 10:e7ab0493ed9f 113 retval = (-1); // Return Error.
afmiee 10:e7ab0493ed9f 114 } else {
afmiee 10:e7ab0493ed9f 115 fclose(fpnew);
afmiee 10:e7ab0493ed9f 116 remove(oldfname); // Remove original file.
afmiee 10:e7ab0493ed9f 117 retval = (0); // Return Success.
afmiee 10:e7ab0493ed9f 118 }
afmiee 10:e7ab0493ed9f 119 return (retval);
afmiee 10:e7ab0493ed9f 120 }
afmiee 10:e7ab0493ed9f 121
afmiee 10:e7ab0493ed9f 122 //***********************************************************
afmiee 10:e7ab0493ed9f 123 // file_copy: Copies a file
afmiee 10:e7ab0493ed9f 124 // Checks to insure destination file was created.
afmiee 10:e7ab0493ed9f 125 // Returns -1 = error; 0 = success
afmiee 10:e7ab0493ed9f 126 //***********************************************************
afmiee 10:e7ab0493ed9f 127 int file_copy (const char *src, const char *dst)
afmiee 10:e7ab0493ed9f 128 {
afmiee 10:e7ab0493ed9f 129 int retval = 0;
afmiee 10:e7ab0493ed9f 130 int ch;
afmiee 10:e7ab0493ed9f 131
afmiee 10:e7ab0493ed9f 132 FILE *fpsrc = fopen(src, "r"); // src file
afmiee 10:e7ab0493ed9f 133 FILE *fpdst = fopen(dst, "w"); // dest file
afmiee 10:e7ab0493ed9f 134
afmiee 10:e7ab0493ed9f 135 while (1) { // Copy src to dest
afmiee 10:e7ab0493ed9f 136 ch = fgetc(fpsrc); // until src EOF read.
afmiee 10:e7ab0493ed9f 137 if (ch == EOF) break;
afmiee 10:e7ab0493ed9f 138 fputc(ch, fpdst);
afmiee 10:e7ab0493ed9f 139 }
afmiee 10:e7ab0493ed9f 140 fclose(fpsrc);
afmiee 10:e7ab0493ed9f 141 fclose(fpdst);
afmiee 10:e7ab0493ed9f 142
afmiee 10:e7ab0493ed9f 143 fpdst = fopen(dst, "r"); // Reopen dest to insure
afmiee 10:e7ab0493ed9f 144 if(fpdst == NULL) { // that it was created.
afmiee 10:e7ab0493ed9f 145 retval = (-1); // Return error.
afmiee 10:e7ab0493ed9f 146 } else {
afmiee 10:e7ab0493ed9f 147 fclose(fpdst);
afmiee 10:e7ab0493ed9f 148 retval = (0); // Return success.
afmiee 10:e7ab0493ed9f 149 }
afmiee 10:e7ab0493ed9f 150 return (retval);
afmiee 10:e7ab0493ed9f 151 }
afmiee 10:e7ab0493ed9f 152 // Generated when button 1 is pressed on rising edge START
afmiee 10:e7ab0493ed9f 153 // Modified to be generated by Interrupt 1
afmiee 10:e7ab0493ed9f 154 void start_smpl()
afmiee 10:e7ab0493ed9f 155 {
afmiee 10:e7ab0493ed9f 156 //lol.readAccel();
afmiee 10:e7ab0493ed9f 157 start = 1;
afmiee 10:e7ab0493ed9f 158 stop = 0;
afmiee 10:e7ab0493ed9f 159 //dbg2 = 1;
afmiee 10:e7ab0493ed9f 160 }
afmiee 10:e7ab0493ed9f 161
afmiee 10:e7ab0493ed9f 162 // Generated when button 1 is pressed on rising edge STOP
afmiee 10:e7ab0493ed9f 163 // Modified to be generated by Interrupt 2
afmiee 10:e7ab0493ed9f 164 void stop_smpl()
afmiee 10:e7ab0493ed9f 165 {
afmiee 10:e7ab0493ed9f 166 stop = 1;
afmiee 10:e7ab0493ed9f 167 start = 0;
afmiee 10:e7ab0493ed9f 168 //dbg2 = 0;
afmiee 10:e7ab0493ed9f 169 }
afmiee 10:e7ab0493ed9f 170
afmiee 10:e7ab0493ed9f 171 void parp( int times )
afmiee 10:e7ab0493ed9f 172 {
afmiee 10:e7ab0493ed9f 173 int i;
afmiee 10:e7ab0493ed9f 174 for( i = 0; i < times; i++) {
afmiee 10:e7ab0493ed9f 175 led1 = 0;
afmiee 10:e7ab0493ed9f 176 wait( 0.05);
afmiee 10:e7ab0493ed9f 177 led1 = 1;
afmiee 10:e7ab0493ed9f 178 wait( 0.05);
afmiee 10:e7ab0493ed9f 179 }
afmiee 10:e7ab0493ed9f 180 led2 = 1;
afmiee 10:e7ab0493ed9f 181 }
afmiee 10:e7ab0493ed9f 182 // Flipped every second
afmiee 10:e7ab0493ed9f 183 void flip()
afmiee 10:e7ab0493ed9f 184 {
afmiee 10:e7ab0493ed9f 185 led2 = 0;
afmiee 10:e7ab0493ed9f 186 wait(0.01);
afmiee 10:e7ab0493ed9f 187 led2 = 1;
afmiee 10:e7ab0493ed9f 188 if ( !stop ) {
afmiee 10:e7ab0493ed9f 189 led1 = 0;
afmiee 10:e7ab0493ed9f 190 wait(0.01);
afmiee 10:e7ab0493ed9f 191 led1 = 1;
afmiee 10:e7ab0493ed9f 192 }
afmiee 10:e7ab0493ed9f 193 }
afmiee 10:e7ab0493ed9f 194
afmiee 10:e7ab0493ed9f 195 void print_config_int_registers( void )
afmiee 10:e7ab0493ed9f 196 {
afmiee 10:e7ab0493ed9f 197 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 198 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 199 debug.printf( "INT1_CTRL (0Ch) %02x\n\r", I2CreadByte(0xD6, 0x0C));
afmiee 10:e7ab0493ed9f 200 debug.printf( "INT2_CTRL (0Dh) %02x\n\r", I2CreadByte(0xD6, 0x0D));
afmiee 10:e7ab0493ed9f 201 debug.printf( "CTRL_REG8 (22h) %02x\n\r", I2CreadByte(0xD6, 0x22));
afmiee 10:e7ab0493ed9f 202 debug.printf( "STATUS_REG (27h) %02x\n\r", I2CreadByte(0xD6, 0x27));
afmiee 10:e7ab0493ed9f 203 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 204 debug.printf( "INT_GEN_CFG_XL (06h) %02x\n\r", I2CreadByte(0xD6, 0x06));
afmiee 10:e7ab0493ed9f 205 debug.printf( "INT_GEN_SRC_XL (26h) %02x\n\r", I2CreadByte(0xD6, 0x26));
afmiee 10:e7ab0493ed9f 206 debug.printf( "INT_GEN_THS_X_XL (07h) %02x\n\r", I2CreadByte(0xD6, 0x07));
afmiee 10:e7ab0493ed9f 207 debug.printf( "INT_GEN_THS_Y_XL (08h) %02x\n\r", I2CreadByte(0xD6, 0x08));
afmiee 10:e7ab0493ed9f 208 debug.printf( "INT_GEN_THS_Z_XL (09h) %02x\n\r", I2CreadByte(0xD6, 0x09));
afmiee 10:e7ab0493ed9f 209 debug.printf( "INT_GEN_DUR_XL (0ah) %02x\n\r", I2CreadByte(0xD6, 0x0a));
afmiee 10:e7ab0493ed9f 210 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 211 debug.printf( "INT_GEN_CFG_G (30h) %02x\n\r", I2CreadByte(0xD6, 0x30));
afmiee 10:e7ab0493ed9f 212 debug.printf( "INT_GEN_SRC_G (14h) %02x\n\r", I2CreadByte(0xD6, 0x14));
afmiee 10:e7ab0493ed9f 213 debug.printf( "INT_GEN_THS_XH_G (31h) %02x\n\r", I2CreadByte(0xD6, 0x31));
afmiee 10:e7ab0493ed9f 214 debug.printf( "INT_GEN_THS_XL_G (32h) %02x\n\r", I2CreadByte(0xD6, 0x32));
afmiee 10:e7ab0493ed9f 215 debug.printf( "INT_GEN_THS_YH_G (33h) %02x\n\r", I2CreadByte(0xD6, 0x33));
afmiee 10:e7ab0493ed9f 216 debug.printf( "INT_GEN_THS_YL_G (34h) %02x\n\r", I2CreadByte(0xD6, 0x34));
afmiee 10:e7ab0493ed9f 217 debug.printf( "INT_GEN_THS_ZH_G (35h) %02x\n\r", I2CreadByte(0xD6, 0x35));
afmiee 10:e7ab0493ed9f 218 debug.printf( "INT_GEN_THS_ZL_G (36h) %02x\n\r", I2CreadByte(0xD6, 0x36));
afmiee 10:e7ab0493ed9f 219 debug.printf( "INT_GEN_DUR_G (37h) %02x\n\r", I2CreadByte(0xD6, 0x37));
afmiee 10:e7ab0493ed9f 220 #endif
afmiee 10:e7ab0493ed9f 221 }
afmiee 10:e7ab0493ed9f 222
afmiee 10:e7ab0493ed9f 223 void open_temp_files( void )
afmiee 10:e7ab0493ed9f 224 {
afmiee 10:e7ab0493ed9f 225 fpA = fopen("/sd/ACC.csv", "w");
afmiee 10:e7ab0493ed9f 226 // Verify that file can be created
afmiee 10:e7ab0493ed9f 227 if ( fpA == NULL ) {
afmiee 10:e7ab0493ed9f 228 debug.printf("Cannot create file ACC.csv\n\r");
afmiee 10:e7ab0493ed9f 229 wait(0.5);
afmiee 10:e7ab0493ed9f 230 while(1) {
afmiee 10:e7ab0493ed9f 231 led1 = !led1;
afmiee 10:e7ab0493ed9f 232 wait(0.5);
afmiee 10:e7ab0493ed9f 233 }
afmiee 10:e7ab0493ed9f 234 } else
afmiee 10:e7ab0493ed9f 235 debug.printf("File ACC.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 236
afmiee 10:e7ab0493ed9f 237 fpG = fopen("/sd/GYR.csv", "w");
afmiee 10:e7ab0493ed9f 238 // Verify that file can be created
afmiee 10:e7ab0493ed9f 239 if ( fpG == NULL ) {
afmiee 10:e7ab0493ed9f 240 debug.printf("Cannot create file GYR.csv\n\r");
afmiee 10:e7ab0493ed9f 241 wait(0.5);
afmiee 10:e7ab0493ed9f 242 while(1) {
afmiee 10:e7ab0493ed9f 243 led1 = !led1;
afmiee 10:e7ab0493ed9f 244 wait(0.5);
afmiee 10:e7ab0493ed9f 245 }
afmiee 10:e7ab0493ed9f 246 } else
afmiee 10:e7ab0493ed9f 247 debug.printf("File GYR.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 248
afmiee 10:e7ab0493ed9f 249 fpM = fopen("/sd/MAG.csv", "w");
afmiee 10:e7ab0493ed9f 250 // Verify that file can be created
afmiee 10:e7ab0493ed9f 251 if ( fpM == NULL ) {
afmiee 10:e7ab0493ed9f 252 debug.printf("Cannot create file MAG.csv\n\r");
afmiee 10:e7ab0493ed9f 253 wait(0.5);
afmiee 10:e7ab0493ed9f 254 while(1) {
afmiee 10:e7ab0493ed9f 255 led1 = !led1;
afmiee 10:e7ab0493ed9f 256 wait(0.5);
afmiee 10:e7ab0493ed9f 257 }
afmiee 10:e7ab0493ed9f 258 } else
afmiee 10:e7ab0493ed9f 259 debug.printf("File MAG.csv created successfully\n\r");
afmiee 10:e7ab0493ed9f 260 }
afmiee 10:e7ab0493ed9f 261
afmiee 10:e7ab0493ed9f 262 void rename_files( void )
afmiee 10:e7ab0493ed9f 263 {
afmiee 10:e7ab0493ed9f 264 sprintf(filename, "/sd/latch9DOFA_%08x.csv",seconds);
afmiee 10:e7ab0493ed9f 265 if((file_rename("/sd/ACC.csv",filename )) == 0) {
afmiee 10:e7ab0493ed9f 266 debug.printf("File ACC.csv renamed successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 267 } else {
afmiee 10:e7ab0493ed9f 268 debug.printf("Error: unable to rename the file ACC.csv");
afmiee 10:e7ab0493ed9f 269 }
afmiee 10:e7ab0493ed9f 270 sprintf(filename, "/sd/latch9DOFM_%08x.csv",seconds);
afmiee 10:e7ab0493ed9f 271 if((file_rename("/sd/MAG.csv",filename )) == 0) {
afmiee 10:e7ab0493ed9f 272 debug.printf("File MAG.csv renamed successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 273 } else {
afmiee 10:e7ab0493ed9f 274 debug.printf("Error: unable to rename the file MAG.csv");
afmiee 10:e7ab0493ed9f 275 }
afmiee 10:e7ab0493ed9f 276 sprintf(filename, "/sd/latch9DOFG_%08x.csv",seconds);
afmiee 10:e7ab0493ed9f 277 if((file_rename("/sd/GYR.csv",filename )) == 0) {
afmiee 10:e7ab0493ed9f 278 debug.printf("File GYR.csv renamed successfully to %s\n\r", filename);
afmiee 10:e7ab0493ed9f 279 } else {
afmiee 10:e7ab0493ed9f 280 debug.printf("Error: unable to rename the file GYR.csv");
afmiee 10:e7ab0493ed9f 281 }
afmiee 10:e7ab0493ed9f 282 }
afmiee 10:e7ab0493ed9f 283
afmiee 10:e7ab0493ed9f 284 int main()
afmiee 10:e7ab0493ed9f 285 {
afmiee 10:e7ab0493ed9f 286 led1= 1;
afmiee 10:e7ab0493ed9f 287
afmiee 10:e7ab0493ed9f 288 struct tm t;
afmiee 10:e7ab0493ed9f 289 // debug pins
afmiee 10:e7ab0493ed9f 290 dbg1 = 0;
afmiee 10:e7ab0493ed9f 291 dbg2 = 0;
afmiee 10:e7ab0493ed9f 292
afmiee 10:e7ab0493ed9f 293 // Attach functions to interrupts
afmiee 10:e7ab0493ed9f 294 flipper.attach(&flip, 1.0); // the address of the function to be attached (flip) and the interval (2 seconds)
afmiee 10:e7ab0493ed9f 295
afmiee 10:e7ab0493ed9f 296 // Enable serial port
afmiee 10:e7ab0493ed9f 297 debug.format(8,Serial::None,1);
afmiee 10:e7ab0493ed9f 298 debug.baud(115200);
afmiee 10:e7ab0493ed9f 299 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 300 debug.printf("LSM9DS1 Test\x0d\x0a");
afmiee 10:e7ab0493ed9f 301 #endif
afmiee 10:e7ab0493ed9f 302
afmiee 10:e7ab0493ed9f 303 // Initialize 9DOF
afmiee 10:e7ab0493ed9f 304 if (!lol.begin()) {
afmiee 10:e7ab0493ed9f 305 debug.printf("Failed to communicate with LSM9DS1.\n");
afmiee 10:e7ab0493ed9f 306 wait(0.5);
afmiee 10:e7ab0493ed9f 307 while(1) {
afmiee 10:e7ab0493ed9f 308 led1 = !led1;
afmiee 10:e7ab0493ed9f 309 wait(0.5);
afmiee 10:e7ab0493ed9f 310 }
afmiee 10:e7ab0493ed9f 311 } else {
afmiee 10:e7ab0493ed9f 312 debug.printf("Communication with the LSM9DS1 successfully\n\r");
afmiee 10:e7ab0493ed9f 313 }
afmiee 10:e7ab0493ed9f 314
afmiee 10:e7ab0493ed9f 315 lol.calibrate(true);
afmiee 10:e7ab0493ed9f 316 //lol.getStatus();
afmiee 10:e7ab0493ed9f 317 //lol.getAccelIntSrc();
afmiee 10:e7ab0493ed9f 318 //lol.readAccel();
afmiee 10:e7ab0493ed9f 319 //lol.readGyro();
afmiee 10:e7ab0493ed9f 320
afmiee 10:e7ab0493ed9f 321 lol.configAccelThs((uint8_t)INT_GEN_THS_X_XL_REG, X_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_X_XL (07h)
afmiee 10:e7ab0493ed9f 322 lol.configAccelThs((uint8_t)INT_GEN_THS_Y_YL_REG, Y_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Y_XL (08h)
afmiee 10:e7ab0493ed9f 323 lol.configAccelThs((uint8_t)INT_GEN_THS_Z_XL_REG, Z_AXIS, (uint8_t)INT_GEN_DUR_XL_REG, false); // INT_GEN_THS_Z_XL (09h)
afmiee 10:e7ab0493ed9f 324
afmiee 10:e7ab0493ed9f 325 lol.configGyroThs((int16_t )INT_GEN_THS_XHL_G_REG, X_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_X_G (31h - 32h)
afmiee 10:e7ab0493ed9f 326 lol.configGyroThs((int16_t )INT_GEN_THS_YHL_G_REG, Y_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Y_G (33h - 34h)
afmiee 10:e7ab0493ed9f 327 lol.configGyroThs((int16_t )INT_GEN_THS_ZHL_G_REG, Z_AXIS, (uint8_t) INT_GEN_DUR_G_REG, false); // INT_GEN_THS_Z_G (35h - 36h)
afmiee 10:e7ab0493ed9f 328 //lol.configGyroInt(ZHIE_G|YHIE_G|XHIE_G, false, false); // INT_GEN_CFG_G (30h)
afmiee 10:e7ab0493ed9f 329
afmiee 10:e7ab0493ed9f 330 lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 331 lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 332 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 333 print_config_int_registers();
afmiee 10:e7ab0493ed9f 334 #endif
afmiee 10:e7ab0493ed9f 335 // Dump all registers
afmiee 10:e7ab0493ed9f 336 //DumpAccelGyroRegs();
afmiee 10:e7ab0493ed9f 337 // // Initialize current time if needed
afmiee 10:e7ab0493ed9f 338 // printf("Enter current date and time:\n");
afmiee 10:e7ab0493ed9f 339 // printf("YYYY MM DD HH MM SS[enter]\n");
afmiee 10:e7ab0493ed9f 340 // scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
afmiee 10:e7ab0493ed9f 341 // , &t.tm_hour, &t.tm_min, &t.tm_sec);
afmiee 10:e7ab0493ed9f 342
afmiee 10:e7ab0493ed9f 343 // adjust for tm structure required values
afmiee 10:e7ab0493ed9f 344 t.tm_year = t.tm_year - 1900;
afmiee 10:e7ab0493ed9f 345 t.tm_mon = t.tm_mon - 1;
afmiee 10:e7ab0493ed9f 346
afmiee 10:e7ab0493ed9f 347 // set the time
afmiee 10:e7ab0493ed9f 348 rtc.set_time(mktime(&t));
afmiee 10:e7ab0493ed9f 349 // Set the interrupt service routines
afmiee 10:e7ab0493ed9f 350 int1.fall(&start_smpl);
afmiee 10:e7ab0493ed9f 351 int2.fall(&stop_smpl);
afmiee 10:e7ab0493ed9f 352
afmiee 10:e7ab0493ed9f 353 // Wait for the start Signal generated by the accelerometer interrupt
afmiee 10:e7ab0493ed9f 354 lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h)
afmiee 10:e7ab0493ed9f 355 lol.configInt(XG_INT1, INT1_IG_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 356 lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true);
afmiee 10:e7ab0493ed9f 357 lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 358
afmiee 10:e7ab0493ed9f 359 while(1) {
afmiee 10:e7ab0493ed9f 360 // Check for button 1 pressed
afmiee 10:e7ab0493ed9f 361 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 362 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 363 debug.printf( "Status (27h) %02x\n\r", lol.getStatus()); // STATUS_REG (27h)
afmiee 10:e7ab0493ed9f 364 debug.printf( "GyroIntSrc (14h) %02x\n\r", lol.getGyroIntSrc()); // INT_GEN_SRC_G (14h)
afmiee 10:e7ab0493ed9f 365 debug.printf( "AccelIntSrc(26h) %02x\n\r", lol.getAccelIntSrc()); // INT_GEN_SRC_XL (26h)
afmiee 10:e7ab0493ed9f 366 debug.printf( "MagIntSrc (31h) %02x\n\r", lol.getMagIntSrc()); // INT_SRC_M (31h)
afmiee 10:e7ab0493ed9f 367 debug.printf( "Inactivity (17h) %02x\n\r", lol.getInactivity()); // STATUS_REG (17h)
afmiee 10:e7ab0493ed9f 368 debug.printf( "\n\r");
afmiee 10:e7ab0493ed9f 369 #endif
afmiee 10:e7ab0493ed9f 370 // Wait for the start Signal generated by the accelerometer interrupt
afmiee 10:e7ab0493ed9f 371 //lol.configAccelInt(ZHIE_XL|YHIE_XL|XHIE_XL, false); // INT_GEN_CFG_XL (06h)
afmiee 10:e7ab0493ed9f 372 //lol.configInt(XG_INT1, INT1_IG_XL, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 373 //lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true);
afmiee 10:e7ab0493ed9f 374 //lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 375
afmiee 10:e7ab0493ed9f 376 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 377 print_config_int_registers();
afmiee 10:e7ab0493ed9f 378 #endif
afmiee 10:e7ab0493ed9f 379 open_temp_files();
afmiee 10:e7ab0493ed9f 380 start = 0;
afmiee 10:e7ab0493ed9f 381 while(!start) {
afmiee 10:e7ab0493ed9f 382 led1 = 1;
afmiee 10:e7ab0493ed9f 383 }
afmiee 10:e7ab0493ed9f 384 dbg1 = 1;
afmiee 10:e7ab0493ed9f 385 // Disable the interrupt
afmiee 10:e7ab0493ed9f 386 //lol.configAccelInt(0, false); // INT_GEN_CFG_XL (06h)
afmiee 10:e7ab0493ed9f 387 //lol.configInt(XG_INT1, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT1_CTRL (0x0C) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 388 // Read the interrupt to clear it
afmiee 10:e7ab0493ed9f 389 //lol.getStatus();
afmiee 10:e7ab0493ed9f 390 // lol.getAccelIntSrc();
afmiee 10:e7ab0493ed9f 391 //lol.readAccel();
afmiee 10:e7ab0493ed9f 392 //lol.getGyroIntSrc();
afmiee 10:e7ab0493ed9f 393 //lol.readGyro();
afmiee 10:e7ab0493ed9f 394
afmiee 10:e7ab0493ed9f 395 dbg1 = 0;
afmiee 10:e7ab0493ed9f 396 // Start sampling
afmiee 10:e7ab0493ed9f 397 //led1 = 0;
afmiee 10:e7ab0493ed9f 398 //parp(5);
afmiee 10:e7ab0493ed9f 399 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 400 debug.printf("Started sampling\n\r");
afmiee 10:e7ab0493ed9f 401 // Get the time and create a file with the number of seconds in hex appended
afmiee 10:e7ab0493ed9f 402 #endif
afmiee 10:e7ab0493ed9f 403 seconds = rtc.time();
afmiee 10:e7ab0493ed9f 404
afmiee 10:e7ab0493ed9f 405 sprintf(secs_str, "%s", ctime(&seconds));
afmiee 10:e7ab0493ed9f 406 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 407 debug.printf("\n\rStarted at: %s\n\r\n\r", secs_str );
afmiee 10:e7ab0493ed9f 408 #endif
afmiee 10:e7ab0493ed9f 409 // program inactivity timer
afmiee 10:e7ab0493ed9f 410
afmiee 10:e7ab0493ed9f 411 //lol.configInactivity(ACT_THS_REG, ACT_DUR_REG, true);
afmiee 10:e7ab0493ed9f 412 //lol.configInt(XG_INT2, INT2_INACT, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 413 // Execute until inctivity timer is triggered
afmiee 10:e7ab0493ed9f 414 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 415 print_config_int_registers();
afmiee 10:e7ab0493ed9f 416 #endif
afmiee 10:e7ab0493ed9f 417 while(!stop) {
afmiee 10:e7ab0493ed9f 418 dbg2 = 1;
afmiee 10:e7ab0493ed9f 419 if (lol.accelAvailable()) {
afmiee 10:e7ab0493ed9f 420 lol.readAccel();
afmiee 10:e7ab0493ed9f 421 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 422 debug.printf("ACC %d, %d, %d\n\r", lol.ax, lol.ay, lol.az);
afmiee 10:e7ab0493ed9f 423 #endif
afmiee 10:e7ab0493ed9f 424 fprintf(fpA, "%d, %d, %d\n\r", lol.ax, lol.ay, lol.az);
afmiee 10:e7ab0493ed9f 425 }
afmiee 10:e7ab0493ed9f 426 if ( lol.magAvailable(X_AXIS) && lol.magAvailable(Y_AXIS) && lol.magAvailable(Z_AXIS)) {
afmiee 10:e7ab0493ed9f 427 lol.readMag();
afmiee 10:e7ab0493ed9f 428 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 429 debug.printf("MAG %d, %d, %d\n\r", lol.mx, lol.my, lol.mz);
afmiee 10:e7ab0493ed9f 430 #endif
afmiee 10:e7ab0493ed9f 431 fprintf(fpM, "%d, %d, %d\n\r", lol.mx, lol.my, lol.mz);
afmiee 10:e7ab0493ed9f 432 }
afmiee 10:e7ab0493ed9f 433 if ( lol.gyroAvailable()) {
afmiee 10:e7ab0493ed9f 434 lol.readGyro();
afmiee 10:e7ab0493ed9f 435 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 436 debug.printf("GYR %d, %d, %d\n\r", lol.gx, lol.gy, lol.gz);
afmiee 10:e7ab0493ed9f 437 #endif
afmiee 10:e7ab0493ed9f 438 fprintf(fpG, "%d, %d, %d\n\r", lol.gx, lol.gy, lol.gz);
afmiee 10:e7ab0493ed9f 439 }
afmiee 10:e7ab0493ed9f 440 }
afmiee 10:e7ab0493ed9f 441 dbg2 = 0;
afmiee 10:e7ab0493ed9f 442 //lol.configInt(XG_INT2, 0, INT_ACTIVE_LOW, INT_PUSH_PULL); //INT2_CTRL (0x0D) + CTRL_REG8 (0x22)
afmiee 10:e7ab0493ed9f 443
afmiee 10:e7ab0493ed9f 444 // Stop Sampling and close file
afmiee 10:e7ab0493ed9f 445 parp(10);
afmiee 10:e7ab0493ed9f 446 #ifdef DEBUG
afmiee 10:e7ab0493ed9f 447 debug.printf("Stopped sampling\n\r");
afmiee 10:e7ab0493ed9f 448 #endif
afmiee 10:e7ab0493ed9f 449 fclose(fpA);
afmiee 10:e7ab0493ed9f 450 fclose(fpM);
afmiee 10:e7ab0493ed9f 451 fclose(fpG);
afmiee 10:e7ab0493ed9f 452 rename_files();
afmiee 10:e7ab0493ed9f 453 }
afmiee 10:e7ab0493ed9f 454 }
afmiee 8:8f4d7f1c588f 455
afmiee 8:8f4d7f1c588f 456 void DumpAccelGyroRegs( void )
afmiee 8:8f4d7f1c588f 457 {
afmiee 8:8f4d7f1c588f 458 char dest[ 0x34 ];
afmiee 8:8f4d7f1c588f 459 int i;
afmiee 8:8f4d7f1c588f 460
afmiee 8:8f4d7f1c588f 461 debug.printf("\n\r");
afmiee 9:61fcd186ac50 462 I2CreadBytes( 0xD6, 0x04, (uint8_t *)dest, 0x34 );
afmiee 9:61fcd186ac50 463
afmiee 8:8f4d7f1c588f 464 for( i = 0; i < 0x34; i++ ) {
afmiee 9:61fcd186ac50 465 //I2CreadByte(0xD6, i + 0x04);
afmiee 8:8f4d7f1c588f 466 switch( i + 0x04 ) {
afmiee 8:8f4d7f1c588f 467 case 0x04:
afmiee 8:8f4d7f1c588f 468 debug.printf("ACT_THS 0x04 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 469 break;
afmiee 8:8f4d7f1c588f 470 case 0x05:
afmiee 8:8f4d7f1c588f 471 debug.printf("ACT_DUR 0x05 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 472 break;
afmiee 8:8f4d7f1c588f 473 case 0x06:
afmiee 8:8f4d7f1c588f 474 debug.printf("INT_GEN_CFG_XL 0x06 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 475 break;
afmiee 8:8f4d7f1c588f 476 case 0x07:
afmiee 8:8f4d7f1c588f 477 debug.printf("INT_GEN_THS_X_XL 0x07 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 478 break;
afmiee 8:8f4d7f1c588f 479 case 0x08:
afmiee 8:8f4d7f1c588f 480 debug.printf("INT_GEN_THS_Y_XL 0x08 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 481 break;
afmiee 8:8f4d7f1c588f 482 case 0x09:
afmiee 8:8f4d7f1c588f 483 debug.printf("INT_GEN_THS_Z_XL 0x09 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 484 break;
afmiee 8:8f4d7f1c588f 485 case 0x0A:
afmiee 8:8f4d7f1c588f 486 debug.printf("INT_GEN_DUR_XL 0x0A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 487 break;
afmiee 8:8f4d7f1c588f 488 case 0x0B:
afmiee 8:8f4d7f1c588f 489 debug.printf("REFERENCE_G 0x0B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 490 break;
afmiee 8:8f4d7f1c588f 491 case 0x0C:
afmiee 8:8f4d7f1c588f 492 debug.printf("INT1_CTRL 0x0C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 493 break;
afmiee 8:8f4d7f1c588f 494 case 0x0D:
afmiee 8:8f4d7f1c588f 495 debug.printf("INT2_CTRL 0x0D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 496 break;
afmiee 8:8f4d7f1c588f 497 case 0x0F:
afmiee 8:8f4d7f1c588f 498 debug.printf("WHO_AM_I_XG 0x0F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 499 break;
afmiee 8:8f4d7f1c588f 500 case 0x10:
afmiee 8:8f4d7f1c588f 501 debug.printf("CTRL_REG1_G 0x10 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 502 break;
afmiee 8:8f4d7f1c588f 503 case 0x11:
afmiee 8:8f4d7f1c588f 504 debug.printf("CTRL_REG2_G 0x11 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 505 break;
afmiee 8:8f4d7f1c588f 506 case 0x12:
afmiee 8:8f4d7f1c588f 507 debug.printf("CTRL_REG3_G 0x12 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 508 break;
afmiee 8:8f4d7f1c588f 509 case 0x13:
afmiee 8:8f4d7f1c588f 510 debug.printf("ORIENT_CFG_G 0x13 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 511 break;
afmiee 8:8f4d7f1c588f 512 case 0x14:
afmiee 8:8f4d7f1c588f 513 debug.printf("INT_GEN_SRC_G 0x14 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 514 break;
afmiee 8:8f4d7f1c588f 515 case 0x15:
afmiee 8:8f4d7f1c588f 516 debug.printf("OUT_TEMP_L 0x15 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 517 break;
afmiee 8:8f4d7f1c588f 518 case 0x16:
afmiee 8:8f4d7f1c588f 519 debug.printf("OUT_TEMP_H 0x16 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 520 break;
afmiee 8:8f4d7f1c588f 521 case 0x17:
afmiee 8:8f4d7f1c588f 522 debug.printf("STATUS_REG_0 0x17 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 523 break;
afmiee 8:8f4d7f1c588f 524 case 0x18:
afmiee 8:8f4d7f1c588f 525 debug.printf("OUT_X_L_G 0x18 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 526 break;
afmiee 8:8f4d7f1c588f 527 case 0x19:
afmiee 8:8f4d7f1c588f 528 debug.printf("OUT_X_H_G 0x19 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 529 break;
afmiee 8:8f4d7f1c588f 530 case 0x1A:
afmiee 8:8f4d7f1c588f 531 debug.printf("OUT_Y_L_G 0x1A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 532 break;
afmiee 8:8f4d7f1c588f 533 case 0x1B:
afmiee 8:8f4d7f1c588f 534 debug.printf("OUT_Y_H_G 0x1B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 535 break;
afmiee 8:8f4d7f1c588f 536 case 0x1C:
afmiee 8:8f4d7f1c588f 537 debug.printf("OUT_Z_L_G 0x1C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 538 break;
afmiee 8:8f4d7f1c588f 539 case 0x1D:
afmiee 8:8f4d7f1c588f 540 debug.printf("OUT_Z_H_G 0x1D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 541 break;
afmiee 8:8f4d7f1c588f 542 case 0x1E:
afmiee 8:8f4d7f1c588f 543 debug.printf("CTRL_REG4 0x1E %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 544 break;
afmiee 8:8f4d7f1c588f 545 case 0x1F:
afmiee 8:8f4d7f1c588f 546 debug.printf("CTRL_REG5_XL 0x1F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 547 break;
afmiee 8:8f4d7f1c588f 548 case 0x20:
afmiee 8:8f4d7f1c588f 549 debug.printf("CTRL_REG6_XL 0x20 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 550 break;
afmiee 8:8f4d7f1c588f 551 case 0x21:
afmiee 8:8f4d7f1c588f 552 debug.printf("CTRL_REG7_XL 0x21 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 553 break;
afmiee 8:8f4d7f1c588f 554 case 0x22:
afmiee 8:8f4d7f1c588f 555 debug.printf("CTRL_REG8 0x22 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 556 break;
afmiee 8:8f4d7f1c588f 557 case 0x23:
afmiee 8:8f4d7f1c588f 558 debug.printf("CTRL_REG9 0x23 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 559 break;
afmiee 8:8f4d7f1c588f 560 case 0x24:
afmiee 8:8f4d7f1c588f 561 debug.printf("CTRL_REG10 0x24 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 562 break;
afmiee 8:8f4d7f1c588f 563 case 0x26:
afmiee 8:8f4d7f1c588f 564 debug.printf("INT_GEN_SRC_XL 0x26 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 565 break;
afmiee 8:8f4d7f1c588f 566 case 0x27:
afmiee 8:8f4d7f1c588f 567 debug.printf("STATUS_REG_1 0x27 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 568 break;
afmiee 8:8f4d7f1c588f 569 case 0x28:
afmiee 8:8f4d7f1c588f 570 debug.printf("OUT_X_L_XL 0x28 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 571 break;
afmiee 8:8f4d7f1c588f 572 case 0x29:
afmiee 8:8f4d7f1c588f 573 debug.printf("OUT_X_H_XL 0x29 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 574 break;
afmiee 8:8f4d7f1c588f 575 case 0x2A:
afmiee 8:8f4d7f1c588f 576 debug.printf("OUT_Y_L_XL 0x2A %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 577 break;
afmiee 8:8f4d7f1c588f 578 case 0x2B:
afmiee 8:8f4d7f1c588f 579 debug.printf("OUT_Y_H_XL 0x2B %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 580 break;
afmiee 8:8f4d7f1c588f 581 case 0x2C:
afmiee 8:8f4d7f1c588f 582 debug.printf("OUT_Z_L_XL 0x2C %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 583 break;
afmiee 8:8f4d7f1c588f 584 case 0x2D:
afmiee 8:8f4d7f1c588f 585 debug.printf("OUT_Z_H_XL 0x2D %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 586 break;
afmiee 8:8f4d7f1c588f 587 case 0x2E:
afmiee 8:8f4d7f1c588f 588 debug.printf("FIFO_CTRL 0x2E %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 589 break;
afmiee 8:8f4d7f1c588f 590 case 0x2F:
afmiee 8:8f4d7f1c588f 591 debug.printf("FIFO_SRC 0x2F %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 592 break;
afmiee 8:8f4d7f1c588f 593 case 0x30:
afmiee 8:8f4d7f1c588f 594 debug.printf("INT_GEN_CFG_G 0x30 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 595 break;
afmiee 8:8f4d7f1c588f 596 case 0x31:
afmiee 8:8f4d7f1c588f 597 debug.printf("INT_GEN_THS_XH_G 0x31 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 598 break;
afmiee 8:8f4d7f1c588f 599 case 0x32:
afmiee 8:8f4d7f1c588f 600 debug.printf("INT_GEN_THS_XL_G 0x32 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 601 break;
afmiee 8:8f4d7f1c588f 602 case 0x33:
afmiee 8:8f4d7f1c588f 603 debug.printf("INT_GEN_THS_YH_G 0x33 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 604 break;
afmiee 8:8f4d7f1c588f 605 case 0x34:
afmiee 8:8f4d7f1c588f 606 debug.printf("INT_GEN_THS_YL_G 0x34 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 607 break;
afmiee 8:8f4d7f1c588f 608 case 0x35:
afmiee 8:8f4d7f1c588f 609 debug.printf("INT_GEN_THS_ZH_G 0x35 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 610 break;
afmiee 8:8f4d7f1c588f 611 case 0x36:
afmiee 8:8f4d7f1c588f 612 debug.printf("INT_GEN_THS_ZL_G 0x36 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 613 break;
afmiee 8:8f4d7f1c588f 614 case 0x37:
afmiee 8:8f4d7f1c588f 615 debug.printf("INT_GEN_DUR_G 0x37 %02x\n\r", dest[i]);
afmiee 8:8f4d7f1c588f 616 break;
afmiee 8:8f4d7f1c588f 617 default:
afmiee 8:8f4d7f1c588f 618 debug.printf("Register Not Valid 0x%02x\n\r");
afmiee 8:8f4d7f1c588f 619 break;
afmiee 8:8f4d7f1c588f 620 }
afmiee 8:8f4d7f1c588f 621 }
afmiee 8:8f4d7f1c588f 622 }
afmiee 8:8f4d7f1c588f 623
afmiee 8:8f4d7f1c588f 624
afmiee 5:b1a689c55f59 625
afmiee 10:e7ab0493ed9f 626 #define DEPTH 64
afmiee 10:e7ab0493ed9f 627 #define DEPP2 6
afmiee 9:61fcd186ac50 628
afmiee 9:61fcd186ac50 629
afmiee 10:e7ab0493ed9f 630 ulint mag_vec( int ax, int ay, int az )
afmiee 10:e7ab0493ed9f 631 {
afmiee 10:e7ab0493ed9f 632 static int x[DEPTH];
afmiee 10:e7ab0493ed9f 633 static int y[DEPTH];
afmiee 10:e7ab0493ed9f 634 static int z[DEPTH];
afmiee 8:8f4d7f1c588f 635
afmiee 10:e7ab0493ed9f 636 int i;
afmiee 10:e7ab0493ed9f 637 int sx,sy,sz;
afmiee 10:e7ab0493ed9f 638
afmiee 10:e7ab0493ed9f 639 x[0] = ax;
afmiee 10:e7ab0493ed9f 640 y[0] = ay;
afmiee 10:e7ab0493ed9f 641 z[0] = az;
afmiee 10:e7ab0493ed9f 642 sx = 0;
afmiee 10:e7ab0493ed9f 643 sy = 0;
afmiee 10:e7ab0493ed9f 644 sz = 0;
afmiee 8:8f4d7f1c588f 645
afmiee 10:e7ab0493ed9f 646 for( i = 0; i < DEPTH; i++ ) {
afmiee 10:e7ab0493ed9f 647 sx+= x[i];
afmiee 10:e7ab0493ed9f 648 sy+= y[i];
afmiee 10:e7ab0493ed9f 649 sz+= z[i];
afmiee 10:e7ab0493ed9f 650 }
afmiee 10:e7ab0493ed9f 651 sx >>= DEPP2;
afmiee 10:e7ab0493ed9f 652 sy >>= DEPP2;
afmiee 10:e7ab0493ed9f 653 sz >>= DEPP2;
afmiee 9:61fcd186ac50 654
afmiee 10:e7ab0493ed9f 655 for( i = 0; i < DEPTH-1; i++ ) {
afmiee 10:e7ab0493ed9f 656 x[i+1] = x[i];
afmiee 10:e7ab0493ed9f 657 y[i+1] = y[i];
afmiee 10:e7ab0493ed9f 658 z[i+1] = z[i];
afmiee 6:9db9f4bfaf98 659 }
afmiee 10:e7ab0493ed9f 660 return( (ulint)(sx*sx + sy*sy + sz*sz) );
tosihisa 4:3c677edffb13 661 }
afmiee 7:cbfdcc57f110 662
afmiee 7:cbfdcc57f110 663
afmiee 10:e7ab0493ed9f 664 ulint maxvec( ulint vec, int reset )
afmiee 10:e7ab0493ed9f 665 {
afmiee 10:e7ab0493ed9f 666 ulint static max;
afmiee 7:cbfdcc57f110 667
afmiee 10:e7ab0493ed9f 668 if( reset == 0 )
afmiee 10:e7ab0493ed9f 669 max = 0;
afmiee 10:e7ab0493ed9f 670
afmiee 10:e7ab0493ed9f 671 if ( vec > max ) {
afmiee 10:e7ab0493ed9f 672 max = vec;
afmiee 10:e7ab0493ed9f 673 }
afmiee 10:e7ab0493ed9f 674 return( max );
afmiee 10:e7ab0493ed9f 675 }
afmiee 10:e7ab0493ed9f 676
afmiee 10:e7ab0493ed9f 677 ulint minvec( ulint vec, int reset )
afmiee 10:e7ab0493ed9f 678 {
afmiee 10:e7ab0493ed9f 679 ulint static min;
afmiee 10:e7ab0493ed9f 680 if ( reset == 0)
afmiee 10:e7ab0493ed9f 681 min = 0xFFFFFFFF;
afmiee 10:e7ab0493ed9f 682
afmiee 10:e7ab0493ed9f 683 if ( vec < min ) {
afmiee 10:e7ab0493ed9f 684 min = vec;
afmiee 10:e7ab0493ed9f 685 }
afmiee 10:e7ab0493ed9f 686 return( min );
afmiee 10:e7ab0493ed9f 687
afmiee 10:e7ab0493ed9f 688 }
afmiee 10:e7ab0493ed9f 689
afmiee 10:e7ab0493ed9f 690