/**************************************************************************//*! * @brief Function reads current data from sensor's register * * @param *mag3110 - pointer to value buffer ******************************************************************************/ int16_t MAG3110_ReadRawData_x(void) { byte ix = 0; int16_t x_val = 0; if(MAG3110_enabled == TRUE) { x_val = MAG3110_READ_REGISTER(REG3110_OUT_X_MSB); x_val = MAG3110_READ_REGISTER(REG3110_OUT_X_LSB); MAG3110_WRITE_REGISTER(REG3110_CTRL_REG2, 0x80); MAG3110_WRITE_REGISTER(REG3110_CTRL_REG1, 0x02); do { ix = MAG3110_READ_REGISTER(REG3110_DR_STATUS); }while((ix & X_DATA_RDY) != X_DATA_RDY); x_val = MAG3110_READ_REGISTER(REG3110_OUT_X_MSB); x_val <<= 8; x_val += MAG3110_READ_REGISTER(REG3110_OUT_X_LSB); } return x_val; }
int16_t MAG3110_ReadRawData_z() { char r = 0; int16_t a = 0; if (MAG3110_Initialized == 1) { a = MAG3110_READ_REGISTER(5); a = MAG3110_READ_REGISTER(6); MAG3110_WRITE_REGISTER(17, 128); MAG3110_WRITE_REGISTER(16, 2); do { r = MAG3110_READ_REGISTER(0); } while (!(r & 4)); a = MAG3110_READ_REGISTER(5); a = a << 8; a = a + MAG3110_READ_REGISTER(6); } return a; }
int MAG3110_Init() { char v = 0; bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(2500); MAG3110_WRITE_REGISTER(16, 0); v = MAG3110_READ_REGISTER(7); if (v == 0xc4) { MAG3110_WRITE_REGISTER(17, 128); MAG3110_Initialized = 1; } return MAG3110_Initialized; }
char MAG3110_ReadRawData(char* data) { char a = 0; short b = 0; if (MAG3110_Initialized == 1) { MAG3110_WRITE_REGISTER(17, 128); MAG3110_WRITE_REGISTER(16, 2); do { a = MAG3110_READ_REGISTER(0); } while ((a & 7) != 7); MAG3110_BULK_READ(1, 6, data); } return 1; }
/**************************************************************************//*! * @brief Function reads current data from sensor's register * * @param *mag3110 - pointer to value buffer ******************************************************************************/ uint8_t MAG3110_ReadRawData(uint8_t * pdata) { byte ix = 0; int16_t z_val = 0; if(MAG3110_enabled == TRUE) { MAG3110_WRITE_REGISTER(REG3110_CTRL_REG2, 0x80); MAG3110_WRITE_REGISTER(REG3110_CTRL_REG1, 0x02); do { ix = MAG3110_READ_REGISTER(REG3110_DR_STATUS); }while((ix & ALL_DATA_RDY) != ALL_DATA_RDY); MAG3110_BULK_READ(REG3110_OUT_X_MSB, 6, pdata); } return TRUE; }
/**************************************************************************//*! * @brief The IIC Initialization for MMA7660 * * @param mod - current used module for conection ******************************************************************************/ uint8_t MAG3110_Init(void) { byte who_i_am = 0; bcm2835_i2c_begin(); bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); // The default MAG3110_WRITE_REGISTER(REG3110_CTRL_REG1, 0x00); who_i_am = MAG3110_READ_REGISTER(REG3110_WHO_AM_I); if(who_i_am == ID_MAG3110) { MAG3110_WRITE_REGISTER(REG3110_CTRL_REG2, 0x80); MAG3110_enabled = TRUE; } return MAG3110_enabled; }