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; }