Quantcast
Channel: Microcontrollers
Viewing all articles
Browse latest Browse all 218828

Forum Post: RE: MSPM0G3507: VL53L0X(TOF) Driver for TI

$
0
0
i find out the issue, attaching a full code, if any one need go through it #include #include #include #include #include #include #include "ti_drivers_config.h" // VL53L0X I2C address #define VL53L0X_ADDR 0x29 // Register addresses #define VL53L0X_REG_SYSRANGE_START 0x00 #define VL53L0X_REG_RESULT_RANGE_STATUS 0x14 #define VL53L0X_REG_RESULT_RANGE_MM 0x1E // Distance register static Display_Handle display; static I2C_Handle i2c; void initVL53L0X() { uint8_t txBuffer[2]; uint8_t rxBuffer[1]; I2C_Transaction i2cTransaction; // Check if sensor is detected txBuffer[0] = 0xC0; // Model ID register i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 1; i2cTransaction.readBuf = rxBuffer; i2cTransaction.readCount = 1; i2cTransaction.targetAddress = VL53L0X_ADDR; if (I2C_transfer(i2c, &i2cTransaction)) { if (rxBuffer[0] == 0xEE) { Display_printf(display, 0, 0, "VL53L0X detected!"); } else { Display_printf(display, 0, 0, "Unexpected Model ID: 0x%x", rxBuffer[0]); } } else { Display_printf(display, 0, 0, "I2C Transfer failed"); } // Set XSHUT HIGH (enable sensor if needed) // GPIO_write(CONFIG_GPIO_TMP_EN, 1); usleep(5000); // Wait 5ms for power-up // Start single measurement mode txBuffer[0] = VL53L0X_REG_SYSRANGE_START; txBuffer[1] = 0x01; // Single-shot mode i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 2; i2cTransaction.readCount = 0; if (!I2C_transfer(i2c, &i2cTransaction)) { Display_printf(display, 0, 0, "Failed to start measurement"); } } void startMeasurement() { uint8_t txBuffer[2]; I2C_Transaction i2cTransaction; txBuffer[0] = VL53L0X_REG_SYSRANGE_START; txBuffer[1] = 0x01; // Start a new measurement i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 2; i2cTransaction.readBuf = NULL; i2cTransaction.readCount = 0; i2cTransaction.targetAddress = VL53L0X_ADDR; I2C_transfer(i2c, &i2cTransaction); } uint16_t readDistance() { uint8_t txBuffer[1]; uint8_t rxBuffer[2]; I2C_Transaction i2cTransaction; uint16_t distance; int timeout = 200; // Start a new measurement before reading startMeasurement(); // Wait for measurement completion do { txBuffer[0] = VL53L0X_REG_RESULT_RANGE_STATUS; i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 1; i2cTransaction.readBuf = rxBuffer; i2cTransaction.readCount = 1; i2cTransaction.targetAddress = VL53L0X_ADDR; if (!I2C_transfer(i2c, &i2cTransaction)) { Display_printf(display, 0, 0, "Error reading status"); return 0xFFFF; } usleep(10000); } while ((rxBuffer[0] & 0x01) == 0 && --timeout > 0); if (timeout == 0) { Display_printf(display, 0, 0, "Timeout waiting for measurement"); return 0xFFFF; } // Read distance txBuffer[0] = VL53L0X_REG_RESULT_RANGE_MM; i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 1; i2cTransaction.readBuf = rxBuffer; i2cTransaction.readCount = 2; if (!I2C_transfer(i2c, &i2cTransaction)) { Display_printf(display, 0, 0, "Error reading distance"); return 0xFFFF; } distance = (rxBuffer[0] 0); if (timeout == 0) { Display_printf(display, 0, 0, "Timeout waiting for measurement"); return 0xFFFF; } // Read distance value (16-bit) txBuffer[0] = VL53L0X_REG_RESULT_RANGE_MM; i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 1; i2cTransaction.readBuf = rxBuffer; i2cTransaction.readCount = 2; if (!I2C_transfer(i2c, &i2cTransaction)) { Display_printf(display, 0, 0, "Error reading distance"); return 0xFFFF; } // Convert to mm distance = (rxBuffer[0] << 8) | rxBuffer[1]; return distance; } #endif void *mainThread(void *arg0) { I2C_Params i2cParams; Display_init(); GPIO_init(); I2C_init(); display = Display_open(Display_Type_UART, NULL); if (display == NULL) { while (1); } I2C_Params_init(&i2cParams); i2cParams.bitRate = I2C_100kHz; i2c = I2C_open(CONFIG_I2C_TMP, &i2cParams); if (i2c == NULL) { Display_printf(display, 0, 0, "Error Initializing I2C\n"); while (1); } initVL53L0X(); while (1) { uint16_t distance = readDistance(); if (distance != 0xFFFF) { Display_printf(display, 0, 0, "Distance: %d mm", distance); } sleep(1); } } Thanks && Regards Amara Rakesh

Viewing all articles
Browse latest Browse all 218828

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>