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,®ister_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