321|2

322

帖子

0

资源

一粒金砂(中级)

【Gravity:AS7341测评】色温感知测量之四 单通道逐个读取数据 [复制链接]

本帖最后由 北方 于 2020-12-30 10:32 编辑

1、 经过前面的资料分析,这个传感器就是一个多通道传感器,分别是一个NIR,8个频谱通道。

这次的测试就是分别读取单个通道的数据,具体这就是色温感知的元数据的来源。

2、代码经过arduino封装后,就比较简单,

首先需要导入库函数,并初始化DFRobot_AS7341

#include "DFRobot_AS7341.h"
DFRobot_AS7341 as7341;

  while (as7341.begin() != 0) {

}

完成以上任务,就直接读取各个通道的数据了。

  as7341.startMeasure(as7341.eF1F4ClearNIR);
  //Read the value of sensor data channel 0~5, under eF1F4ClearNIR
  data1 = as7341.readSpectralDataOne();
  
  Serial.print("F1(405-425nm):");
  Serial.println(data1.ADF1);
  Serial.print("F2(435-455nm):");
  Serial.println(data1.ADF2);
  Serial.print("F3(470-490nm):");
  Serial.println(data1.ADF3);
  Serial.print("F4(505-525nm):");   
  Serial.println(data1.ADF4);
  //Serial.print("Clear:");
  //Serial.println(data1.ADCLEAR);
  //Serial.print("NIR:");
  //Serial.println(data1.ADNIR);
  as7341.startMeasure(as7341.eF5F8ClearNIR);
  //Read the value of sensor data channel 0~5, under eF5F8ClearNIR
  data2 = as7341.readSpectralDataTwo();
  Serial.print("F5(545-565nm):");
  Serial.println(data2.ADF5);
  Serial.print("F6(580-600nm):");
  Serial.println(data2.ADF6);
  Serial.print("F7(620-640nm):");
  Serial.println(data2.ADF7);
  Serial.print("F8(670-690nm):");
  Serial.println(data2.ADF8);
  Serial.print("Clear:");
  Serial.println(data2.ADCLEAR);
  Serial.print("NIR:");
  Serial.println(data2.ADNIR);

以上数据是首先按照clearNIR的方式读取,

分两组,每组其实只有4通道的数据,

读取数据后要清零。

那么,如果希望快速读取传感器数据的应用,就还需要更底层的数据访问,以取得更准确的时间。

读取的数据如下,

捕获.PNG

光照之后数据发生变化,

捕获.PNG

3、大致分析源函数startMeasure();,了解读取的过程

void DFRobot_AS7341::startMeasure(eChChoose_t mode)
{
  uint8_t data=0;
  
  readReg(REG_AS7341_CFG_0,&data,1);
  data = data & (~(1<<4));
  writeReg(REG_AS7341_CFG_0,&data,1);
  
  enableSpectralMeasure(false);
  writeReg(0xAF,0x10);
  if(mode  == eF1F4ClearNIR)
    F1F4_Clear_NIR();
  else if(mode  == eF5F8ClearNIR)
    F5F8_Clear_NIR();
  enableSMUX(true);
  if(measureMode == eSyns){
    setGpioMode(INPUT);
    config(eSyns);
    //writeReg(byte(0xA9), byte(0)); 
  }
  else if(measureMode == eSpm){
    config(eSpm);
  }
  enableSpectralMeasure(true);
  if(measureMode == eSpm){
  while(!measureComplete()){
    delay(1);
  }
  }
}

可以看出,根据不同的通道数,选择参数,eF1F4ClearNIR,I2C通道对应写入寄存器,就可以实现功能,具体的寄存器地址,就是数据手册上标明的数据。

因此,如果需要移植到其他平台上的时候,可以参考这个开源的源代码来实现。

 

赞赏

1

查看全部赞赏


回复

735

帖子

2

资源

版主

还不错!这个就相对比较清晰了。


回复

3184

帖子

1

资源

五彩晶圆(初级)

谢谢分享,早知道我也申请评测一下。

个人签名人已离开,无事别找,找也找不到。

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

最新文章 更多>>
    关闭
    站长推荐上一条 1/4 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表