Collects 30 samples from ADXL345 (3 axis Accelerometer, Sprakfun SEN-09836 breakout board) based on interrupt and presents the data.
Revision 2:4ed2dd2347f3, committed 2011-08-05
- Comitter:
- GerritPathuis
- Date:
- Fri Aug 05 17:58:19 2011 +0000
- Parent:
- 1:7dbdddce7156
- Child:
- 3:f12b8859ecb2
- Commit message:
- Offset improved
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Jul 25 19:13:06 2011 +0000 +++ b/main.cpp Fri Aug 05 17:58:19 2011 +0000 @@ -1,8 +1,8 @@ -/* This program collects 30 samples from a Triple Axis +/* This program collects 30 samples from a Triple Axis * Accelerometer Breakout ADXL345 sensor (Sparkfun.com SEN-09836) * The program is connected to a mbed via 4-wire spi. * The data is collected via DATA_READY interrupt at maximum speed -* of the sensor. +* of the sensor. */ #include "mbed.h" @@ -28,7 +28,6 @@ SPI spi(p5,p6,p7); // mosi, miso, sclk DigitalOut cs(p8); // cs -DigitalIn flag(p15); // InterruptIn event(p9); Serial pc(USBTX, USBRX); @@ -45,7 +44,6 @@ int y; int z; short int time; - short int flag; } data [NOSAMPLES]; int acc[3] = {0, 0, 0}; @@ -65,17 +63,19 @@ interrupt_counter= -1; timer.start(); pc.printf("\n\rBussy collecting data\n\r "); - while (interrupt_counter < (NOSAMPLES-1)) + while (interrupt_counter < (NOSAMPLES-1)) pc.printf("."); ///////////////// present the data //////////////////// + // Full scale 16g is 1024 positions pc.printf("\r"); for (i=0; i <NOSAMPLES; i++) { - xx= data[i].x *0.00312; // 13-bit, sign extended values, 31.2 mg/LSB - yy= data[i].y *0.00312; - zz= data[i].z *0.00312; + xx= data[i].x * 0.004; // Full-res, sign extended values, 4.0 mg/LSB + yy= data[i].y * 0.004; + zz= data[i].z * 0.004; - pc.printf("Sample= %03d, x= %+06.3f, y=%+06.3f, z=%+06.3f, t= %5d us, flag = %2d\n\r", i, xx, yy, zz, data[i].time, data[i].flag ); + pc.printf("Sample= %03d, x= %+06.3f, y=%+06.3f, z=%+06.3f, t= %5d us\n\r", i, xx, yy, zz, data[i].time); + //pc.printf("Sample= %03d, x= %+06d, y=%+06d, z=%+06d \n\r", i, data[i].x, data[i].y, data[i].z); } } @@ -100,13 +100,13 @@ data[interrupt_counter].y = (int16_t) acc[1]; data[interrupt_counter].z = (int16_t) acc[2]; data[interrupt_counter].time = tstamp; - data[interrupt_counter].flag = flag.read(); oneByteRead(0x30); // clear interrupt sources } void init_SPI_ADXL345() { char readID; + int ox, oy, oz; spi.frequency(5000000); // max 5 mHz page 8 of the ADXL345 datasheet spi.format(8,3); @@ -119,6 +119,14 @@ pc.printf("Sorry not connected to ADXL345 !!!(readID= %d)\n\r", readID); // set up ADXL345 + ox = 13; // Offset X direction, not yet two's complement, (15.6 mg/LSB) + oy = 2; // Offset Y direction, not yet two's complement, (15.6 mg/LSB) + oz = 3; // Offset Z direction, not yet two's complement, (15.6 mg/LSB) + + oneByteWrite(0x1E, -ox); // Offset X in two's complement + oneByteWrite(0x1F, -oy); // Offset Y in two's complement + oneByteWrite(0x20, -oz); // Offset Z in two's complement + oneByteWrite(0x2D, 0x00); // PowerControl, Go into standby mode to configure the device. oneByteWrite(0x2E, 0x00); // InterruptEnableControl, disable all interrupts @@ -134,7 +142,7 @@ oneByteWrite(0x29, 0x01); // TIME_FF is set to 1 oneByteWrite(0x2A, 0x00); // TAP_AXES disable - oneByteWrite(0x31, 0x0B); // setDataFormatControl, 4-wire SPI, Full_RES, Right justify, +/-16g, 4mg/LSB. + oneByteWrite(0x31, 0x0B); // setDataFormatControl, 4-wire SPI, Full res, Right justify, +/-16g, 4 mg/LSB. oneByteWrite(0x2F, 0x00); // setInterruptMappingControl, send ALL interrupt to pin INT1 oneByteWrite(0x38, 0x01); // setFifoControl, Bypass, Int pin 1, 1 sample oneByteWrite(0x2C, 0x0F); // setDataRate, 3.2kHz data rate