cancel
Showing results for 
Search instead for 
Did you mean: 

VL53L1X with atmega328

manjesh n
Associate
Posted on May 31, 2018 at 12:07

Hi,

I have project for obstacle distance measurement where VL53L1X sensor is used and the microcontroller is Atmeag 328. I have downloaded API reference code. But there are lot of files which is really confusing me. I have used single sensor in my project. I have written software I2C to read basic register information from VL53L1X. I am able read the following registers properly.

Model ID - 0x010F - Am reading 0xEA which is correct

Model Type - 0x0110 - Am reading 0xCC which is correct

Mask Revision - 0x0111 - Am reading 0x10 which is correct

But to measure the distance there are lot of API's. It would be really helpful if i get any sample code or example code with atmel Microcontroller.

Kindly help me.

2 REPLIES 2
John E KVAM
ST Employee
Posted on June 07, 2018 at 01:00

You are most of the way there. Don't quit now. There is a bit of code called X-Cube-vl53l1x. It's available at:

http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32cube-expansion-software/stm32-ode-sense-sw/x-cube-53l1a1.html

With the code you have written, you are all set. Copy the calls from the main.c and it will just work for you.

And this code makes a pretty handy reference - even if you don't use an ST processor.

For example:

 status = VL53L1_WaitDeviceBooted(Dev);

 status += VL53L1_DataInit(Dev);

 status += VL53L1_StaticInit(Dev);

 status += VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LITE_RANGING);

 status += VL53L1_SetDistanceMode(Dev, VL53L1_DISTANCEMODE_MEDIUM);

 status += VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000);

 //status += VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, 100);

 status += VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev, &pMeasurementTimingBudgetMicroSeconds);

 printf('Timing Budget = %d\n', pMeasurementTimingBudgetMicroSeconds);

status += VL53L1_StartMeasurement(Dev);

 if(status){

  printf('YOU DID SOMETHING WRONG \n');

  while(1);

 } 

 if (isInterrupt){

  do // interrupt mode

  {

   __WFI();

   if(IntCount !=0 ){

    IntCount=0;

    status = VL53L1_GetRangingMeasurementData(Dev, &RangingData);

    if(status==0){

     printf('%d,%d,%.2f,%.2f,%d\n', RangingData.RangeStatus,RangingData.RangeMilliMeter,

      RangingData.SignalRateRtnMegaCps/65536.0,RangingData.AmbientRateRtnMegaCps/65336.0,HAL_GetTick());

    }

    status = VL53L1_ClearInterruptAndStartMeasurement(Dev);

   }

  }

  while(1);

Our community relies on fruitful exchanges and good quality content. You can thank and reward helpful and positive contributions by marking them as 'Accept as Solution'. When marking a solution, make sure it answers your original question or issue that you raised.

ST Employees that act as moderators have the right to accept the solution, judging by their expertise. This helps other community members identify useful discussions and refrain from raising the same question. If you notice any false behavior or abuse of the action, do not hesitate to 'Report Inappropriate Content'
Posted on June 08, 2018 at 11:27

Thank you john kvam

it was useful