ghetto code to run MMA

Dependencies:   mbed

Committer:
donoman
Date:
Fri Apr 18 04:59:01 2014 +0000
Revision:
0:3718fa40956d
Working code with all prints, but really ghetto calls;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donoman 0:3718fa40956d 1 #include "mbed.h"
donoman 0:3718fa40956d 2
donoman 0:3718fa40956d 3 #define MMA8451_I2C_ADDRESS (0x1d<<1)
donoman 0:3718fa40956d 4 #define REG_WHO_AM_I 0x0D
donoman 0:3718fa40956d 5 #define REG_CTRL_REG1 0x2A
donoman 0:3718fa40956d 6 #define REG_CTRL_REG2 0x2B
donoman 0:3718fa40956d 7 #define REG_CTRL_REG3 0x2C
donoman 0:3718fa40956d 8 #define REG_SYSMOD 0x0B
donoman 0:3718fa40956d 9 #define REG_OUT_X_MSB 0x01
donoman 0:3718fa40956d 10
donoman 0:3718fa40956d 11
donoman 0:3718fa40956d 12 DigitalOut myled(LED_GREEN);
donoman 0:3718fa40956d 13 Serial pc(USBTX, USBRX);
donoman 0:3718fa40956d 14 I2C i2c(PTE25, PTE24); //MMA8451 Accelerometer
donoman 0:3718fa40956d 15
donoman 0:3718fa40956d 16
donoman 0:3718fa40956d 17 int main() {
donoman 0:3718fa40956d 18 pc.baud(9600);
donoman 0:3718fa40956d 19
donoman 0:3718fa40956d 20 uint8_t reg1_orig;
donoman 0:3718fa40956d 21 char t1[1] = {REG_CTRL_REG1};
donoman 0:3718fa40956d 22 i2c.write(MMA8451_I2C_ADDRESS, t1, 1, true);
donoman 0:3718fa40956d 23 i2c.read(MMA8451_I2C_ADDRESS, (char*) &reg1_orig, 1);
donoman 0:3718fa40956d 24
donoman 0:3718fa40956d 25 uint8_t reg2_orig;
donoman 0:3718fa40956d 26 char t3[1] = {REG_CTRL_REG2};
donoman 0:3718fa40956d 27 i2c.write(MMA8451_I2C_ADDRESS, t3, 1, true);
donoman 0:3718fa40956d 28 i2c.read(MMA8451_I2C_ADDRESS, (char*) &reg2_orig, 1);
donoman 0:3718fa40956d 29
donoman 0:3718fa40956d 30 while (true) {
donoman 0:3718fa40956d 31
donoman 0:3718fa40956d 32 //This uses the I2C library function long forms
donoman 0:3718fa40956d 33
donoman 0:3718fa40956d 34 pc.printf("reg1_orig: %x\n", reg1_orig);
donoman 0:3718fa40956d 35 pc.printf("reg2_orig: %x\n", reg2_orig);
donoman 0:3718fa40956d 36
donoman 0:3718fa40956d 37
donoman 0:3718fa40956d 38 uint8_t who_am_i;
donoman 0:3718fa40956d 39 char t[1] = {REG_WHO_AM_I};
donoman 0:3718fa40956d 40 i2c.write(MMA8451_I2C_ADDRESS, t, 1, true);
donoman 0:3718fa40956d 41 i2c.read(MMA8451_I2C_ADDRESS, (char*) &who_am_i, 1);
donoman 0:3718fa40956d 42 pc.printf("WAI: %x\n", who_am_i); //Print both to screen
donoman 0:3718fa40956d 43
donoman 0:3718fa40956d 44 uint8_t x_val;
donoman 0:3718fa40956d 45 char tx_val[1] = {REG_OUT_X_MSB};
donoman 0:3718fa40956d 46 i2c.write(MMA8451_I2C_ADDRESS, tx_val, 1, true);
donoman 0:3718fa40956d 47 i2c.read(MMA8451_I2C_ADDRESS, (char*) &x_val, 1);
donoman 0:3718fa40956d 48 pc.printf("x: %x\n", x_val); //Print both to screen
donoman 0:3718fa40956d 49
donoman 0:3718fa40956d 50 myled=0;
donoman 0:3718fa40956d 51 wait(0.1);
donoman 0:3718fa40956d 52 myled=1;
donoman 0:3718fa40956d 53 wait(0.1);
donoman 0:3718fa40956d 54 myled=0;
donoman 0:3718fa40956d 55 wait(0.1);
donoman 0:3718fa40956d 56 myled=1;
donoman 0:3718fa40956d 57 wait(0.1);
donoman 0:3718fa40956d 58
donoman 0:3718fa40956d 59 uint8_t w1[2] = {REG_CTRL_REG1, 0x01};
donoman 0:3718fa40956d 60 i2c.write(MMA8451_I2C_ADDRESS, (char *) w1, 2);
donoman 0:3718fa40956d 61 uint8_t w2[2] = {REG_CTRL_REG2, 0x00};
donoman 0:3718fa40956d 62 i2c.write(MMA8451_I2C_ADDRESS, (char *) w2, 2);
donoman 0:3718fa40956d 63 wait(5); //delay for measurement
donoman 0:3718fa40956d 64
donoman 0:3718fa40956d 65 myled=0;
donoman 0:3718fa40956d 66 wait(0.1);
donoman 0:3718fa40956d 67 myled=1;
donoman 0:3718fa40956d 68 wait(0.1);
donoman 0:3718fa40956d 69
donoman 0:3718fa40956d 70 uint8_t w1_off[2] = {REG_CTRL_REG1, 0x00};
donoman 0:3718fa40956d 71 i2c.write(MMA8451_I2C_ADDRESS, (char *) w1_off, 2);
donoman 0:3718fa40956d 72 wait(5); //delay for measurement
donoman 0:3718fa40956d 73
donoman 0:3718fa40956d 74
donoman 0:3718fa40956d 75 uint8_t reg1_value=6;
donoman 0:3718fa40956d 76 i2c.write(MMA8451_I2C_ADDRESS, t1, 1, true);
donoman 0:3718fa40956d 77 i2c.read(MMA8451_I2C_ADDRESS, (char*) &reg1_value, 1);
donoman 0:3718fa40956d 78 pc.printf("reg1_new: %x\n", reg1_value); //Print both to screen
donoman 0:3718fa40956d 79
donoman 0:3718fa40956d 80 uint8_t reg2_value=6;
donoman 0:3718fa40956d 81 i2c.write(MMA8451_I2C_ADDRESS, t3, 1, true);
donoman 0:3718fa40956d 82 i2c.read(MMA8451_I2C_ADDRESS, (char*) &reg2_value, 1);
donoman 0:3718fa40956d 83 pc.printf("reg2_new: %x\n", reg2_value); //Print both to screen
donoman 0:3718fa40956d 84
donoman 0:3718fa40956d 85
donoman 0:3718fa40956d 86 //End of Long form
donoman 0:3718fa40956d 87 //wait(5);
donoman 0:3718fa40956d 88
donoman 0:3718fa40956d 89 uint8_t sys_mod;
donoman 0:3718fa40956d 90 char t2[1] = {REG_SYSMOD};
donoman 0:3718fa40956d 91 i2c.write(MMA8451_I2C_ADDRESS, t2, 1, true);
donoman 0:3718fa40956d 92 i2c.read(MMA8451_I2C_ADDRESS, (char*) &sys_mod, 1);
donoman 0:3718fa40956d 93 pc.printf("Sysmod: %x\n", sys_mod); //Print both to screen
donoman 0:3718fa40956d 94
donoman 0:3718fa40956d 95 //pc.printf("WAI: %x, Reg1: %x\n", who_am_i, reg1_value); //Print both to screen
donoman 0:3718fa40956d 96 //pc.printf("Short: %x Long: %x\n", who_am_i, who_am_i_2); //Print both to screen
donoman 0:3718fa40956d 97
donoman 0:3718fa40956d 98 //myled = !myled; //Heartbeat
donoman 0:3718fa40956d 99 }
donoman 0:3718fa40956d 100 }
donoman 0:3718fa40956d 101
donoman 0:3718fa40956d 102 /*
donoman 0:3718fa40956d 103 void MMA8451Q::readRegs(int addr, uint8_t * data, int len) {
donoman 0:3718fa40956d 104 char t[1] = {addr};
donoman 0:3718fa40956d 105 m_i2c.write(m_addr, t, 1, true);
donoman 0:3718fa40956d 106 m_i2c.read(m_addr, (char *)data, len);
donoman 0:3718fa40956d 107 }*/