OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6728|回复: 11

激光ATK-VL53L0X多个工作问题

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-1-25
在线时间
7 小时
发表于 2018-10-18 19:30:25 | 显示全部楼层 |阅读模式
5金钱
我现在遇到一个问题,就是两个ATK-VL53L0X在同一IIC总线下工作的问题。我使用的原子哥的精英版代码,接线的话。就是一个ATK-VL53L0X接的和原子哥一样,另一个ATK-VL53L0X只有使能脚和第一个不一样。两个单独初始化就可以正常工作,但是                vl53l0x_init(&vl53l0x_Rdev,0x52);        //mode: 0:默认;1:高精度;2:长距离;3:高速
        vl53l0x_set_mode(&vl53l0x_Rdev,3);
        
        vl53l0x_init(&vl53l0x_Ldev,0x54);
        //mode: 0:默认;1:高精度;2:长距离;3:高速
        vl53l0x_set_mode(&vl53l0x_Ldev,3);
同时初始化,就会只能使用下面那个VL53L0X。vl53l0x_Ldev。但是使用vl53l0x_Rdev就不能正常工作串口只打印了
State;0 ,
d:    0mm

最佳答案

查看完整内容[请看2#楼]

2个VL53L0X只能接2个IIC。不能接同一个IIC。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-10-18 19:30:26 | 显示全部楼层
2个VL53L0X只能接2个IIC。不能接同一个IIC。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-1-22
在线时间
5 小时
发表于 2019-2-18 16:29:18 | 显示全部楼层
2个IIC是指两根总线还是指一根总线两个地址?如果是两根总线的话,那例程中提供的修改IIC地址函数VL53L0X_Error vl53l0x_Addr_set(VL53L0X_Dev_t *dev,uint8_t newaddr)又有什么意义呢
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-1-22
在线时间
5 小时
发表于 2019-2-18 16:33:41 | 显示全部楼层
正点原子 发表于 2018-10-18 19:30
2个VL53L0X只能接2个IIC。不能接同一个IIC。

2个IIC是指两根总线还是指一根总线两个地址?如果是两根总线的话,那例程中提供的修改IIC地址函数VL53L0X_Error vl53l0x_Addr_set(VL53L0X_Dev_t *dev,uint8_t newaddr)又有什么意义呢
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-5-6
在线时间
6 小时
发表于 2019-7-23 09:40:10 | 显示全部楼层
问题解决了没,可以给一下代码吗
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-7-11
在线时间
24 小时
发表于 2019-10-29 10:42:38 | 显示全部楼层
老哥问题解决了么》?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-9-28
在线时间
4 小时
发表于 2019-11-1 22:39:44 | 显示全部楼层
第一次写博客,记录一下使用四个正点原子VL53L0获取数据的过程。

使用IIC总线模式驱动四个正点原子VL53L0模块,开发板使用F103ZET6,F1系列都通用,iic是软件模拟,再加四个普通IO,用来做初始化时的片选信号

正点原子的VL53L0用户手册上写明了再次使能时地址会恢复为0x52,这是一个坑,要注意。

//这里是vl530x.c文件

//单个VL53L0初始化
VL53L0X_Error vl53l0x_initX( VL53L0X_Dev_t *pMyDevice ,u8 vl53l0_x_id)
{
    VL53L0X_Error Status = VL53L0X_ERROR_NONE;   //初始值赋值为0
    pMyDevice->I2cDevAddr      = 0x52;        //iic地址  0x52是默认地址,要初始化必须先写0x52,才能初始化,之后再通过软件修改
    pMyDevice->comms_type      =  1;              //选择IIC还是SPI    iic=1;SPI=0
    pMyDevice->comms_speed_khz =  400;            //iic速率   


    //正点原子的VL53L0用户手册上写明了再次使能时地址会恢复为0x52,所以只能使能一次,设置好地址即可,这里是核心
    switch(vl53l0_x_id)
      {
        case 0:  
           I2C_X0_HIGH();  
              delay_ms(20);
           vl53l0x_Addr_set(pMyDevice,0x54);//设置第一个VL53L0X传感器I2C地址
           break;
        case 1:               
           I2C_X1_HIGH();
              delay_ms(20);
           vl53l0x_Addr_set(pMyDevice,0x56);//设置第一个VL53L0X传感器I2C地址
           break;
        case 2:  
            I2C_X2_HIGH();  
               delay_ms(20);
            vl53l0x_Addr_set(pMyDevice,0x58);
            break;
        case 3:  
            I2C_X3_HIGH();  
               delay_ms(20);
            vl53l0x_Addr_set(pMyDevice,0x5a);
            break;
      }
    Status = VL53L0X_DataInit(pMyDevice); // Data initialization  //VL53L0X_DataInit:一次设备的初始化,初始化成功返回0
    if(Status != VL53L0X_ERROR_NONE){     //判断如果状态不为0   打印错误信息
        print_pal_error(Status);
        return Status;        //  返回错误值 可通过此值DEBUG查找错误位置
    }

    Status = VL53L0X_GetDeviceInfo(pMyDevice, &vl53l0x_dev_info);   //读取给定设备的设备信息
    if(Status != VL53L0X_ERROR_NONE){
        print_pal_error(Status);
        return Status;
    }
    printf("VL53L0X_GetDeviceInfo:\n");
    printf("Device Name : %s\n", vl53l0x_dev_info.Name);     //设备名
    printf("Device Type : %s\n", vl53l0x_dev_info.Type);    //产品类型VL53L0X = 1, VL53L1 = 2 
    printf("Device ID : %s\n", vl53l0x_dev_info.ProductId);   // 设备ID
    printf("ProductRevisionMajor : %d\n", vl53l0x_dev_info.ProductRevisionMajor);
    printf("ProductRevisionMinor : %d\n", vl53l0x_dev_info.ProductRevisionMinor);

    if ((vl53l0x_dev_info.ProductRevisionMajor != 1) && (vl53l0x_dev_info.ProductRevisionMinor != 1)){
        printf("Error expected cut 1.1 but found cut %d.%d\n",
        vl53l0x_dev_info.ProductRevisionMajor, vl53l0x_dev_info.ProductRevisionMinor);
        Status = VL53L0X_ERROR_NOT_SUPPORTED;
        print_pal_error(Status);
        return Status;
    }

    Status = vl53l0x_measure_init(pMyDevice);   //测量配置
    vl53l0x_status = Status;
    if(Status != VL53L0X_ERROR_NONE){    //判断如果不为0打印错误信息
        print_pal_error(Status);
        return Status;
    }        
}

//在主函数调用这个初始化函数即可
VL53L0X_Error vl53l0x_init(void)
{
    
    VL53L0X_Error Status = VL53L0X_ERROR_NONE;   //初始值赋值为0

     //初始化一定按照这个顺序执行,否则不成功
     VL53L0X_i2c_init(); 
     vl53l0x_initX(&vl53l0x_dev0,0);
     vl53l0x_initX(&vl53l0x_dev1,1);
     vl53l0x_initX(&vl53l0x_dev2,2);
     vl53l0x_initX(&vl53l0x_dev3,3);
       
    return Status;           //返回0
}

 

//这里是主函数

int main(void)
{     
        delay_init();             //延时函数初始化      
        NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
        uart_init(9600);
        vl53l0x_init(); 

  while(1)
    {
      vl53l0x_getdistance();

      //distancebuff[4] 定义在vl530x.c文件中,并且声明为外部变量,供主函数调用
      printf( "0:%d 1:%d 2:%d 3:%d\r\n",distancebuff[0],distancebuff[1],distancebuff[2],distancebuff[3]);    
      delay_ms(1000);
    } 
}

 

笔者一直遇到的问题在前买说了,VL53L0只能使能一次,设置好地址后不要关闭使能,所以只能逐一开启使能完成初始化,否词就会调用出错。

完整工程请自行下载。
————————————————
版权声明:本文为CSDN博主「lx635541878」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:blog.csdn.net/lx635541878/article/details/102863796
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-8-2
在线时间
8 小时
发表于 2019-11-7 19:27:56 | 显示全部楼层
noddles 发表于 2019-11-1 22:39
第一次写博客,记录一下使用四个正点原子VL53L0获取数据的过程。

使用IIC总线模式驱动四个正点原子VL53L ...

你好,我使用了你的例程,串口打印error:Call of VL53L0X_PerformSingleRangingMeasurement是为什么?可以说一下4个要怎么接线吗
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-8-2
在线时间
8 小时
发表于 2019-11-7 19:32:17 | 显示全部楼层
爱神的箭 发表于 2019-11-7 19:27
你好,我使用了你的例程,串口打印error:Call of VL53L0X_PerformSingleRangingMeasurement是为什么?可 ...

我使用的是vl53l0xv2
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-9-28
在线时间
4 小时
发表于 2019-11-11 20:32:19 | 显示全部楼层

你好,可以去我的csdn那篇文章下,那下面有相关解答
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-1-31
在线时间
5 小时
发表于 2020-8-21 10:49:00 | 显示全部楼层
noddles 发表于 2019-11-11 20:32
你好,可以去我的csdn那篇文章下,那下面有相关解答

CSDN链接发一下呗
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-6-27
在线时间
3 小时
发表于 2022-3-13 23:08:34 | 显示全部楼层
我也遇到了同样的问题,最后发现只能用两路IIC驱动!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表