Driving

Dependencies:   FSR LIS3DH USBDevice mbed

Fork of MMA8452_Demo by Ivan Rush

Committer:
ashleymills
Date:
Tue Mar 04 17:51:27 2014 +0000
Revision:
0:0c17274c3b7c
Child:
1:e9981919b524
(Incomplete) test program for the MMA8452 accelerometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:0c17274c3b7c 1 #include "mbed.h"
ashleymills 0:0c17274c3b7c 2 #include "MMA8452.h"
ashleymills 0:0c17274c3b7c 3
ashleymills 0:0c17274c3b7c 4 DigitalOut myled(LED1);
ashleymills 0:0c17274c3b7c 5
ashleymills 0:0c17274c3b7c 6 Serial pc(USBTX,USBRX);
ashleymills 0:0c17274c3b7c 7
ashleymills 0:0c17274c3b7c 8 #define LOG(...) pc.printf(__VA_ARGS__); pc.printf("\r\n");
ashleymills 0:0c17274c3b7c 9 #define LOGX(...) pc.printf(__VA_ARGS__);
ashleymills 0:0c17274c3b7c 10
ashleymills 0:0c17274c3b7c 11 void printByte(char b) {
ashleymills 0:0c17274c3b7c 12 LOG("%d%d%d%d%d%d%d%d",
ashleymills 0:0c17274c3b7c 13 (b&0x80)>>7,
ashleymills 0:0c17274c3b7c 14 (b&0x40)>>6,
ashleymills 0:0c17274c3b7c 15 (b&0x20)>>5,
ashleymills 0:0c17274c3b7c 16 (b&0x10)>>4,
ashleymills 0:0c17274c3b7c 17 (b&0x08)>>3,
ashleymills 0:0c17274c3b7c 18 (b&0x04)>>2,
ashleymills 0:0c17274c3b7c 19 (b&0x02)>>1,
ashleymills 0:0c17274c3b7c 20 (b&0x01)
ashleymills 0:0c17274c3b7c 21 );
ashleymills 0:0c17274c3b7c 22 }
ashleymills 0:0c17274c3b7c 23
ashleymills 0:0c17274c3b7c 24 void sampleMMA8452(MMA8452 *acc, int nsamples) {
ashleymills 0:0c17274c3b7c 25 int samples = 0;
ashleymills 0:0c17274c3b7c 26 int bufLen = 6;
ashleymills 0:0c17274c3b7c 27 char buffer[6];
ashleymills 0:0c17274c3b7c 28 memset(&buffer,0x00,bufLen);
ashleymills 0:0c17274c3b7c 29 while(samples<nsamples) {
ashleymills 0:0c17274c3b7c 30 if(!acc->isXYZReady()) {
ashleymills 0:0c17274c3b7c 31 wait(0.01);
ashleymills 0:0c17274c3b7c 32 continue;
ashleymills 0:0c17274c3b7c 33 }
ashleymills 0:0c17274c3b7c 34 memset(&buffer,0x00,bufLen);
ashleymills 0:0c17274c3b7c 35 acc->readRawXYZ(buffer);
ashleymills 0:0c17274c3b7c 36 LOGX("Sample %d of %d: ",samples,nsamples);
ashleymills 0:0c17274c3b7c 37 for(int i=0; i<bufLen; i++) {
ashleymills 0:0c17274c3b7c 38 LOGX("%.2x ",buffer[i]);
ashleymills 0:0c17274c3b7c 39 }
ashleymills 0:0c17274c3b7c 40 LOG(" ");
ashleymills 0:0c17274c3b7c 41 samples++;
ashleymills 0:0c17274c3b7c 42 }
ashleymills 0:0c17274c3b7c 43 }
ashleymills 0:0c17274c3b7c 44
ashleymills 0:0c17274c3b7c 45 int test() {
ashleymills 0:0c17274c3b7c 46 MMA8452 acc(p28, p27, 40000);
ashleymills 0:0c17274c3b7c 47
ashleymills 0:0c17274c3b7c 48 acc.debugRegister(MMA8452_CTRL_REG_1);
ashleymills 0:0c17274c3b7c 49
ashleymills 0:0c17274c3b7c 50 LOG("Entering standby");
ashleymills 0:0c17274c3b7c 51 if(acc.standby()) {
ashleymills 0:0c17274c3b7c 52 LOG("Error putting MMA8452 in standby");
ashleymills 0:0c17274c3b7c 53 return false;
ashleymills 0:0c17274c3b7c 54 }
ashleymills 0:0c17274c3b7c 55
ashleymills 0:0c17274c3b7c 56 acc.debugRegister(MMA8452_CTRL_REG_1);
ashleymills 0:0c17274c3b7c 57
ashleymills 0:0c17274c3b7c 58 LOG("Activating MMA8452");
ashleymills 0:0c17274c3b7c 59 if(acc.activate()) {
ashleymills 0:0c17274c3b7c 60 LOG("Error activating MMA8452");
ashleymills 0:0c17274c3b7c 61 return false;
ashleymills 0:0c17274c3b7c 62 }
ashleymills 0:0c17274c3b7c 63
ashleymills 0:0c17274c3b7c 64 // test setting dynamic range
ashleymills 0:0c17274c3b7c 65 MMA8452::DynamicRange setRange = MMA8452::DYNAMIC_RANGE_UNKNOWN;
ashleymills 0:0c17274c3b7c 66 MMA8452::DynamicRange readRange = MMA8452::DYNAMIC_RANGE_UNKNOWN;
ashleymills 0:0c17274c3b7c 67 for(int i=0; i<=(int)MMA8452::DYNAMIC_RANGE_8G; i++) {
ashleymills 0:0c17274c3b7c 68 setRange = (MMA8452::DynamicRange)i;
ashleymills 0:0c17274c3b7c 69 if(acc.setDynamicRange(setRange)) {
ashleymills 0:0c17274c3b7c 70 LOG("Error setting dynamic range. Failing.");
ashleymills 0:0c17274c3b7c 71 return false;
ashleymills 0:0c17274c3b7c 72 }
ashleymills 0:0c17274c3b7c 73 readRange = acc.getDynamicRange();
ashleymills 0:0c17274c3b7c 74 if(readRange!=setRange) {
ashleymills 0:0c17274c3b7c 75 LOG("Read dynamic range: 0x%x does not match set: 0x%x",readRange,setRange);
ashleymills 0:0c17274c3b7c 76 return false;
ashleymills 0:0c17274c3b7c 77 }
ashleymills 0:0c17274c3b7c 78 LOG("Success on dynamic range %d",i);
ashleymills 0:0c17274c3b7c 79 }
ashleymills 0:0c17274c3b7c 80
ashleymills 0:0c17274c3b7c 81 // test setting data rate
ashleymills 0:0c17274c3b7c 82 for(int i=0; i<=(int)MMA8452::RATE_1_563; i++) {
ashleymills 0:0c17274c3b7c 83 if(acc.setDataRate((MMA8452::DataRateHz)i)) {
ashleymills 0:0c17274c3b7c 84 LOG("Error setting data rate. Failing.");
ashleymills 0:0c17274c3b7c 85 return false;
ashleymills 0:0c17274c3b7c 86 }
ashleymills 0:0c17274c3b7c 87 if(acc.getDataRate()!=(MMA8452::DataRateHz)i) {
ashleymills 0:0c17274c3b7c 88 LOG("Read data rate: 0x%x does not match set: 0x%x",acc.getDataRate(),(MMA8452::DataRateHz)i);
ashleymills 0:0c17274c3b7c 89 return false;
ashleymills 0:0c17274c3b7c 90 }
ashleymills 0:0c17274c3b7c 91 LOG("Success on data rate %d",i);
ashleymills 0:0c17274c3b7c 92 }
ashleymills 0:0c17274c3b7c 93
ashleymills 0:0c17274c3b7c 94 // set bit depth to 8 and read some values
ashleymills 0:0c17274c3b7c 95 LOG("Sampling at BIT_DEPTH_8");
ashleymills 0:0c17274c3b7c 96 acc.setBitDepth(MMA8452::BIT_DEPTH_8);
ashleymills 0:0c17274c3b7c 97 sampleMMA8452(&acc,10);
ashleymills 0:0c17274c3b7c 98
ashleymills 0:0c17274c3b7c 99 // set bit depth to 12 and read some values
ashleymills 0:0c17274c3b7c 100 LOG("Sampling at BIT_DEPTH_12");
ashleymills 0:0c17274c3b7c 101 acc.setDataRate(MMA8452::RATE_100);
ashleymills 0:0c17274c3b7c 102 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
ashleymills 0:0c17274c3b7c 103 sampleMMA8452(&acc,10);
ashleymills 0:0c17274c3b7c 104
ashleymills 0:0c17274c3b7c 105 return true;
ashleymills 0:0c17274c3b7c 106 }
ashleymills 0:0c17274c3b7c 107
ashleymills 0:0c17274c3b7c 108 void loop() {
ashleymills 0:0c17274c3b7c 109 while(1) {
ashleymills 0:0c17274c3b7c 110 wait(1);
ashleymills 0:0c17274c3b7c 111 }
ashleymills 0:0c17274c3b7c 112 }
ashleymills 0:0c17274c3b7c 113
ashleymills 0:0c17274c3b7c 114 int main() {
ashleymills 0:0c17274c3b7c 115 pc.baud(115200);
ashleymills 0:0c17274c3b7c 116 LOG("Begin");
ashleymills 0:0c17274c3b7c 117 for(int i=0; i<20; i++) {
ashleymills 0:0c17274c3b7c 118 LOG(" ");
ashleymills 0:0c17274c3b7c 119 }
ashleymills 0:0c17274c3b7c 120 if(!test()) {
ashleymills 0:0c17274c3b7c 121 LOG("FAIL.");
ashleymills 0:0c17274c3b7c 122 loop();
ashleymills 0:0c17274c3b7c 123 }
ashleymills 0:0c17274c3b7c 124 LOG("Tests passed");
ashleymills 0:0c17274c3b7c 125 loop();
ashleymills 0:0c17274c3b7c 126 }