Minor fixes

Dependencies:   LSM9DS1_Library SDFileSystem mbed nrf51_rtc

Fork of LSM303DLHTest by Toshihisa T

Committer:
afmiee
Date:
Thu Sep 29 22:03:48 2016 +0000
Revision:
12:f361ccfc191e
Parent:
11:a246c67d44b0
Minor fixes

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