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

Not getting sensor(VL53l0X) distance value using I2C interface using NRF52832 development board.

Hi Nordic Support,

I am not getting sensor(VL53l0X) value,i used slave device address=0x29 and register address=0x01. I am getting starting distance value=255,afterwards zero value.

Please check and tell me,this code is correct or not and also register address.please suggest me why i am getting zero value.I have mentioned code below.

 void data_handler(void)
{

    uint16_t dist_buf=0;

    NRF_LOG_INFO("distance: %d (in mm).", data);
}


void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{
//printf("event =%d\n",p_event->type);
    switch (p_event->type)
    {
    
        case NRF_DRV_TWI_EVT_DONE:
             if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX)
             {
               data_handler();
             }
            m_xfer_done = true;
          
            printf("done\n");
            break;
            
        case NRF_DRV_TWI_EVT_ADDRESS_NACK:
              printf("No address ACK on address\n");
            break;
            
        case NRF_DRV_TWI_EVT_DATA_NACK:
              printf("No data ACK on address\n");
            break;
          
        default:
            break;
    }
}


static ret_code_t twi_master_init(void)
{
    ret_code_t ret;
    const nrf_drv_twi_config_t config =
    {
       .scl                = TWI_SCL_M,
       .sda                = TWI_SDA_M,
       .frequency          = NRF_TWI_FREQ_400K,
       .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
       .clear_bus_init     = false
    };

    do
    {
        ret = nrf_drv_twi_init(&m_twi_master, &config, twi_handler,NULL);
        if(NRF_SUCCESS != ret)
        {
            break;
        }
        nrf_drv_twi_enable(&m_twi_master);
    }while(0);
    return ret;
}


static void read_sensor_data()
{
    m_xfer_done = false;

    /* Read 1 byte from the specified address - skip 3 bits dedicated for fractional part of temperature. */
    ret_code_t err_code = nrf_drv_twi_rx(&m_twi_master, SLAVE_ADDRESS, &data, sizeof(data));
    APP_ERROR_CHECK(err_code);

    distance = (uint16_t)(data[0] << 8 | data[1]);
    printf("value %d\n",distance);

}


int main(void)
{
    bool erase_bonds;

  uint8_t register_address = 0x01;
  uint8_t buffer={0};

    // Initialize.
    log_init();

   

     ret_code_t err_code;


     twi_master_init();
      
      m_xfer_done=false;

     err_code=nrf_drv_twi_tx(&m_twi_master,SLAVE_ADDRESS,&register_address,sizeof(register_address),false);
     if(err_code == NRF_SUCCESS)
     {
              NRF_LOG_INFO("Device Address and Register Address(3 bit mode+ 5 bit reg address sent");

     }
     while(m_xfer_done == false)
     {
        NRF_LOG_PROCESS();
     }


    while (true)
    {
        nrf_delay_ms(500);

        do
        {
            __WFE();
        }while (m_xfer_done == false);

        read_sensor_data();
        NRF_LOG_FLUSH();
    }

Thanks and Regards,

Anitha

Related