Dear Nordic Team,
Thanks for support
Currently i am work with VL53L0X in ble_uart_app example. it working fine , but its take 5ma current. How can i use TWI in low power mode. Please suggest anyone.
SDK =12.3.0 , SD=s132.
My Code :
void twi_init (void)
{
ret_code_t err_code;
const nrf_drv_twi_config_t twi_config = {
.scl = DEVICE_SCL_PIN,
.sda = DEVICE_SDA_PIN,
.frequency = NRF_TWI_FREQ_400K,
.interrupt_priority = APP_IRQ_PRIORITY_HIGH,
.clear_bus_init = false
};
err_code = nrf_drv_twi_init(&m_twi, &twi_config, NULL, NULL); //twi_handler
APP_ERROR_CHECK(err_code);
nrf_drv_twi_enable(&m_twi);
}
int main(void)
{
uint32_t err_code;
bool erase_bonds;
uint8_t LI8u_Buffer[50]={0};
static uint8_t data_array[20]={"Distance===>0000MM\n"};
// Initialize.
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);
//uart_init();
//==============================================================
// twi_init();
// if(VL53L0X_init(1)){VL53L0X_Init_flag=1;}
// else VL53L0X_Init_flag = 0;
// VL53L0X_setSignalRateLimit(0.1);
// VL53L0X_setVcselPulsePeriod(VcselPeriodPreRange,18);
// VL53L0X_setVcselPulsePeriod(VcselPeriodFinalRange,14);
// VL53L0X_setMeasurementTimingBudget(220000);
//============================================================
buttons_leds_init(&erase_bonds);
ble_stack_init();
gap_params_init();
services_init();
advertising_init();
conn_params_init();
// printf("\r\nUART Start!\r\n");
err_code = ble_advertising_start(BLE_ADV_MODE_FAST);
APP_ERROR_CHECK(err_code);
// Enter main loop.
for (;;)
{
// nrf_delay_ms(5000);
power_manage();
if(m_conn_handle != BLE_CONN_HANDLE_INVALID)
{
Read_Sensor();
data_array[12]='0'+(Distance/1000);
data_array[13]='0'+(Distance/100)%10;
data_array[14]='0'+(Distance/10)%10;
data_array[15]='0'+(Distance%10);
if(VL53L0X_Init_flag){
err_code=ble_nus_string_send(&m_nus,(uint8_t *)"INIT OK",7);
if (err_code != NRF_ERROR_INVALID_STATE)
{
APP_ERROR_CHECK(err_code);
}
}
err_code=ble_nus_string_send(&m_nus,data_array,sizeof(data_array));
if (err_code != NRF_ERROR_INVALID_STATE)
{
APP_ERROR_CHECK(err_code);
}
nrf_delay_ms(500);
}
}
}
void Read_Sensor(void){
twi_init();nrf_delay_ms(5);
if(VL53L0X_init(1)){VL53L0X_Init_flag=1;}
else VL53L0X_Init_flag = 0; nrf_delay_ms(5);
//VL53L0X_Init_flag=1;
VL53L0X_setSignalRateLimit(0.1);
VL53L0X_setVcselPulsePeriod(VcselPeriodPreRange,18);
VL53L0X_setVcselPulsePeriod(VcselPeriodFinalRange,14);
VL53L0X_setMeasurementTimingBudget(220000);
nrf_delay_ms(500);
Distance = VL53L0X_readRangeSingleMillimeters();
if( Distance<=2000 && Distance>0 )
{
Dist_Values=Distance;
// printf("Distance=%d\r\n",Dist_Values);
}else{
if(Distance!=0&&Distance!=65535){
if(Distance>=2000 &&Distance <=8000){
Dist_Values=1999;
}
else if(Distance>=8000 && Distance <=9000){
Dist_Values=1999;
}
}
// printf("Distance Error=%d\r\n",Distance);
}
nrf_drv_twi_disable(&m_twi); nrf_delay_ms(5);
nrf_drv_twi_uninit(&m_twi);nrf_delay_ms(5);
*(volatile uint32_t *)0x40003FFC = 0;
*(volatile uint32_t *)0x40003FFC;
*(volatile uint32_t *)0x40003FFC = 1;
}