This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

I2c to read HMC5883L

Dear nordic, 

I tried to interface HMC5883L but i cant get proper data . can you help me what wrong i do?

/*Defines*/
#define HMC5883L_ADDR (0x3CU>>1)
#define HMC5883L_REG_CONF_A (0x00) 
#define HMC5883L_REG_CONF_B (0x01) 
#define HMC5883L_REG_MODE (0x02) 
#define HMC5883L_REG_X_MSB (0x03) 
#define HMC5883L_REG_X_LSB (0x04)


/* TWI initalization */
/**
 * @brief UART initialization.
 */
void twi_init (void)
{
    ret_code_t err_code;

    const nrf_drv_twi_config_t twi_lm75b_config = {
       .scl                = ARDUINO_SCL_PIN,
       .sda                = ARDUINO_SDA_PIN,
       .frequency          = NRF_DRV_TWI_FREQ_400K,
       .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
       .clear_bus_init     = false
    };

    err_code = nrf_drv_twi_init(&m_twi, &twi_lm75b_config, twi_handler, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_twi_enable(&m_twi);
}

/******initalization HMC5883L*************************/

void HMC5883L_set_mode(void)
{
    ret_code_t err_code;


	uint8_t reg[5] = {HMC5883L_REG_CONF_A, 0x70,0xA0,0x00};

err_code = nrf_drv_twi_tx(&m_twi, HMC5883L_ADDR, reg, 4, false);  
APP_ERROR_CHECK(err_code);

}


/**************************Read from register*******************/

static void read_sensor_data()
{

	uint8_t reg[2] = { 0x00};



	 nrf_drv_twi_tx(&m_twi, HMC5883L_ADDR, reg, 1,false); // Point to register			
    nrf_drv_twi_rx(&m_twi, HMC5883L_ADDR, buff_t, 1); // just try to read configure register

  
}

Related