Donovan Lee
/
I2C_learn
ghetto code to run MMA
main.cpp@0:3718fa40956d, 2014-04-18 (annotated)
- 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?
User | Revision | Line number | New 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*) ®1_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*) ®2_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*) ®1_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*) ®2_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 | }*/ |