Dependencies:   MMA8451Q mbed

Committer:
Thierro
Date:
Fri Jan 09 11:11:45 2015 +0000
Revision:
0:03ec17aefbcc
Child:
1:1df877428dff
SPI 9/1/2014

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Thierro 0:03ec17aefbcc 1 #include "mbed.h"
Thierro 0:03ec17aefbcc 2 #include "MMA8451Q.h"
Thierro 0:03ec17aefbcc 3 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Thierro 0:03ec17aefbcc 4 PinName const SDA = PTE25;
Thierro 0:03ec17aefbcc 5 PinName const SCL = PTE24;
Thierro 0:03ec17aefbcc 6 #else
Thierro 0:03ec17aefbcc 7 #error TARGET NOT DEFINED
Thierro 0:03ec17aefbcc 8 #endif
Thierro 0:03ec17aefbcc 9 /*
Thierro 0:03ec17aefbcc 10 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Thierro 0:03ec17aefbcc 11 PinName const SDA = PTE25;
Thierro 0:03ec17aefbcc 12 PinName const SCL = PTE24;
Thierro 0:03ec17aefbcc 13 #elif defined (TARGET_KL05Z)
Thierro 0:03ec17aefbcc 14 PinName const SDA = PTB4;
Thierro 0:03ec17aefbcc 15 PinName const SCL = PTB3;
Thierro 0:03ec17aefbcc 16 #elif defined (TARGET_K20D50M)
Thierro 0:03ec17aefbcc 17 PinName const SDA = PTB1;
Thierro 0:03ec17aefbcc 18 PinName const SCL = PTB0;
Thierro 0:03ec17aefbcc 19 #else
Thierro 0:03ec17aefbcc 20 #error TARGET NOT DEFINED
Thierro 0:03ec17aefbcc 21 #endif
Thierro 0:03ec17aefbcc 22 */
Thierro 0:03ec17aefbcc 23
Thierro 0:03ec17aefbcc 24 #define MMA8451_I2C_ADDRESS (0x1d<<1)
Thierro 0:03ec17aefbcc 25 #define CNTRL_REG_1 0x2A
Thierro 0:03ec17aefbcc 26 #define CNTRL_REG_2 0x2B
Thierro 0:03ec17aefbcc 27 #define X_acc 0x01
Thierro 0:03ec17aefbcc 28 #define Y_acc 0x03
Thierro 0:03ec17aefbcc 29 #define Z_acc 0x05
Thierro 0:03ec17aefbcc 30 #define STATUS 0x00
Thierro 0:03ec17aefbcc 31
Thierro 0:03ec17aefbcc 32 float conversion(char buf);
Thierro 0:03ec17aefbcc 33 PinName const MOSI = PTD2;
Thierro 0:03ec17aefbcc 34 PinName const MISO = PTD3;
Thierro 0:03ec17aefbcc 35 PinName const SCK = PTD1;
Thierro 0:03ec17aefbcc 36 PinName const SS = PTD0;
Thierro 0:03ec17aefbcc 37
Thierro 0:03ec17aefbcc 38 int main(void)
Thierro 0:03ec17aefbcc 39 {
Thierro 0:03ec17aefbcc 40
Thierro 0:03ec17aefbcc 41 I2C i2c(SDA,SCL);
Thierro 0:03ec17aefbcc 42 SPI device(MOSI, MISO, SCK); // mosi, miso, sclk
Thierro 0:03ec17aefbcc 43 device.format(8,1);
Thierro 0:03ec17aefbcc 44 device.frequency(500000);
Thierro 0:03ec17aefbcc 45 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
Thierro 0:03ec17aefbcc 46
Thierro 0:03ec17aefbcc 47 int address = MMA8451_I2C_ADDRESS;
Thierro 0:03ec17aefbcc 48 float x, y, z;
Thierro 0:03ec17aefbcc 49 char stato=STATUS;
Thierro 0:03ec17aefbcc 50 char addr_reg2=CNTRL_REG_2;
Thierro 0:03ec17aefbcc 51 char data_stato;
Thierro 0:03ec17aefbcc 52 char stato_reg2;
Thierro 0:03ec17aefbcc 53 const char X_addr=X_acc;
Thierro 0:03ec17aefbcc 54 const char Y_addr=Y_acc;
Thierro 0:03ec17aefbcc 55 const char Z_addr=Z_acc;
Thierro 0:03ec17aefbcc 56 char z_buffer;
Thierro 0:03ec17aefbcc 57 char y_buffer;
Thierro 0:03ec17aefbcc 58 char x_buffer;
Thierro 0:03ec17aefbcc 59
Thierro 0:03ec17aefbcc 60 char data[2] = {CNTRL_REG_1, 0x00};
Thierro 0:03ec17aefbcc 61 i2c.write(address, data, 2);
Thierro 0:03ec17aefbcc 62
Thierro 0:03ec17aefbcc 63 i2c.write(address,&addr_reg2,1,true);
Thierro 0:03ec17aefbcc 64 i2c.read(address,&stato_reg2,1,false);
Thierro 0:03ec17aefbcc 65
Thierro 0:03ec17aefbcc 66 char data_reg2[2] = {CNTRL_REG_2, (stato_reg2 |4)};
Thierro 0:03ec17aefbcc 67 i2c.write(address, data_reg2, 2);
Thierro 0:03ec17aefbcc 68
Thierro 0:03ec17aefbcc 69 char data_reg1[2]={CNTRL_REG_1, 0xFB};
Thierro 0:03ec17aefbcc 70 i2c.write(address,data_reg1, 2);
Thierro 0:03ec17aefbcc 71 PwmOut rled(LED1);
Thierro 0:03ec17aefbcc 72 PwmOut gled(LED2);
Thierro 0:03ec17aefbcc 73 PwmOut bled(LED3);
Thierro 0:03ec17aefbcc 74
Thierro 0:03ec17aefbcc 75 while (true) {
Thierro 0:03ec17aefbcc 76
Thierro 0:03ec17aefbcc 77 i2c.write(address,&stato,1,true);
Thierro 0:03ec17aefbcc 78 i2c.read(address,&data_stato,1,false);
Thierro 0:03ec17aefbcc 79
Thierro 0:03ec17aefbcc 80 if(data_stato & 8 == 8)
Thierro 0:03ec17aefbcc 81 {
Thierro 0:03ec17aefbcc 82 z = 0;
Thierro 0:03ec17aefbcc 83 x = 0;
Thierro 0:03ec17aefbcc 84 y = 0;
Thierro 0:03ec17aefbcc 85 i2c.write(address,&Z_addr,1,true);
Thierro 0:03ec17aefbcc 86 i2c.read(address,&z_buffer,1,false);
Thierro 0:03ec17aefbcc 87 printf("z=%d\n\r", z_buffer);
Thierro 0:03ec17aefbcc 88
Thierro 0:03ec17aefbcc 89
Thierro 0:03ec17aefbcc 90 i2c.write(address,&X_addr,1,true);
Thierro 0:03ec17aefbcc 91 i2c.read(address,&x_buffer,1,false);
Thierro 0:03ec17aefbcc 92 printf("x=%d\n\r", x_buffer);
Thierro 0:03ec17aefbcc 93
Thierro 0:03ec17aefbcc 94
Thierro 0:03ec17aefbcc 95 i2c.write(address,&Y_addr,1,true);
Thierro 0:03ec17aefbcc 96 i2c.read(address,&y_buffer,1,false);
Thierro 0:03ec17aefbcc 97 printf("y=%d\n\r", y_buffer);
Thierro 0:03ec17aefbcc 98
Thierro 0:03ec17aefbcc 99 printf("\n\r");
Thierro 0:03ec17aefbcc 100 x = conversion(x_buffer);
Thierro 0:03ec17aefbcc 101 printf("X= %f\n\r",x);
Thierro 0:03ec17aefbcc 102 y = conversion(y_buffer);
Thierro 0:03ec17aefbcc 103 printf("Y= %f\n\r",y);
Thierro 0:03ec17aefbcc 104 z = conversion(z_buffer);
Thierro 0:03ec17aefbcc 105 printf("Z= %f\n\r",z);
Thierro 0:03ec17aefbcc 106 printf("\n\r");
Thierro 0:03ec17aefbcc 107 rled = 1.0f - abs(x);
Thierro 0:03ec17aefbcc 108 gled = 1.0f - abs(y);
Thierro 0:03ec17aefbcc 109 bled = 1.0f - abs(z);
Thierro 0:03ec17aefbcc 110
Thierro 0:03ec17aefbcc 111
Thierro 0:03ec17aefbcc 112 }
Thierro 0:03ec17aefbcc 113
Thierro 0:03ec17aefbcc 114 char zeta[8];
Thierro 0:03ec17aefbcc 115 z = -1.62830;
Thierro 0:03ec17aefbcc 116 sprintf(zeta,"%lf",z);
Thierro 0:03ec17aefbcc 117 int i;
Thierro 0:03ec17aefbcc 118 for(i=0; i<8; i++)
Thierro 0:03ec17aefbcc 119 {
Thierro 0:03ec17aefbcc 120 DigitalOut (SS,0);
Thierro 0:03ec17aefbcc 121 device.write(i);
Thierro 0:03ec17aefbcc 122 //device.write(85);
Thierro 0:03ec17aefbcc 123 DigitalOut (SS,1);
Thierro 0:03ec17aefbcc 124 DigitalOut (SS,0);
Thierro 0:03ec17aefbcc 125 device.write(zeta[i]);
Thierro 0:03ec17aefbcc 126 DigitalOut (SS,1);
Thierro 0:03ec17aefbcc 127 }
Thierro 0:03ec17aefbcc 128 }
Thierro 0:03ec17aefbcc 129 }
Thierro 0:03ec17aefbcc 130
Thierro 0:03ec17aefbcc 131
Thierro 0:03ec17aefbcc 132 float conversion(char buf)
Thierro 0:03ec17aefbcc 133 {
Thierro 0:03ec17aefbcc 134 float val=0;
Thierro 0:03ec17aefbcc 135 if( (buf/128) >= 1)
Thierro 0:03ec17aefbcc 136 {
Thierro 0:03ec17aefbcc 137 buf -= 128;
Thierro 0:03ec17aefbcc 138 val -= 128;
Thierro 0:03ec17aefbcc 139 }
Thierro 0:03ec17aefbcc 140
Thierro 0:03ec17aefbcc 141 if( (buf/64) >= 1)
Thierro 0:03ec17aefbcc 142 {
Thierro 0:03ec17aefbcc 143 buf-= 64;
Thierro 0:03ec17aefbcc 144 val += 64;
Thierro 0:03ec17aefbcc 145 }
Thierro 0:03ec17aefbcc 146 if( (buf/32) >= 1)
Thierro 0:03ec17aefbcc 147 {
Thierro 0:03ec17aefbcc 148 buf -=32;
Thierro 0:03ec17aefbcc 149 val += 32;
Thierro 0:03ec17aefbcc 150 }
Thierro 0:03ec17aefbcc 151 if( (buf/16) >= 1)
Thierro 0:03ec17aefbcc 152 {
Thierro 0:03ec17aefbcc 153 buf -=16;
Thierro 0:03ec17aefbcc 154 val += 16;
Thierro 0:03ec17aefbcc 155 }
Thierro 0:03ec17aefbcc 156 if( (buf/8) >= 1)
Thierro 0:03ec17aefbcc 157 {
Thierro 0:03ec17aefbcc 158 buf -=8;
Thierro 0:03ec17aefbcc 159 val += 8;
Thierro 0:03ec17aefbcc 160 }
Thierro 0:03ec17aefbcc 161 if( (buf/4) >= 1)
Thierro 0:03ec17aefbcc 162 {
Thierro 0:03ec17aefbcc 163 buf -= 4;
Thierro 0:03ec17aefbcc 164 val += 4;
Thierro 0:03ec17aefbcc 165 }
Thierro 0:03ec17aefbcc 166 if( (buf/2) >= 1)
Thierro 0:03ec17aefbcc 167 {
Thierro 0:03ec17aefbcc 168 buf -= 2;
Thierro 0:03ec17aefbcc 169 val += 2;
Thierro 0:03ec17aefbcc 170 }
Thierro 0:03ec17aefbcc 171 if( (buf/1) >= 1)
Thierro 0:03ec17aefbcc 172 {
Thierro 0:03ec17aefbcc 173 val+= 1;
Thierro 0:03ec17aefbcc 174 }
Thierro 0:03ec17aefbcc 175 val = (float) val/64;
Thierro 0:03ec17aefbcc 176 return val;
Thierro 0:03ec17aefbcc 177 }