3763|13

6841

帖子

11

TA的资源

版主

楼主
 

【国民技术N32G430】6、STK33B62光传感器检测 [复制链接]

 
 

最近做了一个光传感测检测的工程,在这里跟大家分享一下。

STK33B62集成了环境和红外内置940nm VCSEL的光数字转换器(垂直腔面发射激光器)二极管和I2C接口。此设备不仅提供环境光线感应,实现强健的背光/显示亮度控制和红外感应具有中断功能的邻近估计。对于环境光感应,STK33B62包括一个光电二极管、定时控制器和ADC炸薯条出色的光谱响应设计用于靠近人眼。STK33B62适用于检测宽范围的光强度环境对于接近感测,STK33B62也集成了光电二极管、定时控制器和ADC在同一芯片中。光谱响应STK33B62针对波长940nm进行了优化红外线。STK33B62提供可编程功能驱动VCSEL并使用噪声的电流设置高度拒绝不需要的取消方案环境红外噪声。STK33B62具有强大的片上刷新率设置没有外部组件。软件关闭提供模式控制以节省电力应用STK33B62工作电压范围为1.7伏至2.0伏。

驱动程序:

#include "stk33b62.h"
#include "i2c.h"
#include "stdio.h"
#include "oled.h"

u8 stk33b62_init(void)
{
  u8 res = 1;
  res = stk33b62_write_reg(SOFT_RESET,0x00);
  if(res == 0)
  {
    printf("init STK33B62 OK!");
  }
  else
    return 1;
  res = ap3216c_read_one_reg(PDT_ID);
  if(res == 1)
  {
    printf("read PID ERROR!\n");
    return 1;
  }
  else
  {
    printf("ID: %x\n",res);
    
  }
  //写入可测量参数
  res = stk33b62_write_reg(STK_STATE,EN_ALSK | EN_WAIT | EN_ALS | EN_PS);
  if(res ==1)
  {
    printf("EN STK ERROR!\n");
    return 1;
  }
  
  //写入PSS累计时间采样 384Us b100, 次数 b001 2  0x41
  res = stk33b62_write_reg(PSCTRL,0x41);
  //写入ALS累计时间采样 100ms b101, 次数 b001 1  0x50  默认值,可以不写
  return 0;
}

//往reg寄存器中写入dat数据
u8 stk33b62_write_reg(u8 reg,u8 dat)
{
	I2C_Start();
	I2C_Send_Byte(STK33B62_ADDR|OLED_CMD);
	if(I2C_WaitAck())
  {
    printf("waitack err1");
		return 1;
  }
	I2C_Send_Byte(reg);
	if(I2C_WaitAck())
  {
    printf("waitack err2");
		return 2;
  }
	I2C_Send_Byte(dat);
	if(I2C_WaitAck())
  {
    printf("waitack err3");
		return 3;	
  }
	I2C_Stop();
	
	return 0;//代表成功
}


//返回值:读到的数据
u8 ap3216c_read_one_reg(u8 reg)
{
	u8 dat;
	
	I2C_Start();
	I2C_Send_Byte(STK33B62_ADDR|OLED_CMD);
	if(I2C_WaitAck())
		return 1;
	I2C_Send_Byte(reg);
	if(I2C_WaitAck())
		return 2;		
  I2C_Stop();
	I2C_Start();
	I2C_Send_Byte(STK33B62_ADDR|OLED_DATA);
	if(I2C_WaitAck())
		return 3;		
	dat = I2C_Read_Byte(0);
	I2C_Stop();
	
	return dat;
}



u16 ap3216c_read_two_reg(u8 reg)
{
  u16 data;
  I2C_Start();
	I2C_Send_Byte(STK33B62_ADDR|OLED_CMD);
	if(I2C_WaitAck())
		return 1;
	I2C_Send_Byte(reg);
	if(I2C_WaitAck())
		return 2;		
  I2C_Stop();
	I2C_Start();
	I2C_Send_Byte(STK33B62_ADDR|OLED_DATA);
	if(I2C_WaitAck())
		return 3;		
	data = (u16) I2C_Read_Byte(1);
  data = (u16)((data<<8) | I2C_Read_Byte(0));
	I2C_Stop();
  return data;
}
// 读取ALS值 
#define START_X 30
#define END_X 80

void READ_ALS(void)
{
  u16 als, ps;
  u8 string_als[4];
  u8 string_ps[4];
  u8 n,midde;
  als = ap3216c_read_two_reg(DATA1_ALS);
  sprintf(string_als,"%4d",als);
  if(als <1)
  {
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,7+n,END_X,7+n,0);
    }
  }
  else if(als<10)
  {
    midde=START_X + 10;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,7+n,midde,7+n,1);
      OLED_DrawLine(midde,7+n,END_X,7+n,0);
    }
    
  }
  else if(als<100)
  {
    midde=START_X + 20;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,7+n,midde,7+n,1);
      OLED_DrawLine(midde,7+n,END_X,7+n,0);
    }
  }
  else if(als<1000)
  {
    midde=START_X + 40;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,7+n,midde,7+n,1);
      OLED_DrawLine(midde,7+n,END_X,7+n,0);
    }
  }
  else{
     midde=START_X + 50;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,7+n,midde,7+n,1);
      OLED_DrawLine(midde,7+n,END_X,7+n,0);
    }
  }
  OLED_ShowString(90,0,string_als,16,1);
  ps = ap3216c_read_two_reg(DATA1_PS);
  sprintf(string_ps,"%4d",ps);
  if(ps <1)
  {
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,22+n,END_X,22+n,0);
    }
  }
  else if(ps<10)
  {
    midde=START_X + 10;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,22+n,midde,22+n,1);
      OLED_DrawLine(midde,22+n,END_X,22+n,0);
    }
  }
  else if(ps<100)
  {
    midde=START_X + 30;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,22+n,midde,22+n,1);
      OLED_DrawLine(midde,22+n,END_X,22+n,0);
    }
  }
  else if(ps<1000)
  {
    midde=START_X + 40;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,22+n,midde,22+n,1);
      OLED_DrawLine(midde,22+n,END_X,22+n,0);
    }
  }
  else{
    midde=START_X + 50;
    for(n=0;n<6;n++)
    {
      OLED_DrawLine(START_X,22+n,midde,22+n,1);
      OLED_DrawLine(midde,22+n,END_X,22+n,0);
    }
  }
  
  OLED_ShowString(90,16,string_ps,16,1);
  
}

 
光传感

 

最新回复

来这里点个赞   详情 回复 发表于 2023-3-23 16:31
点赞 关注(1)
 
 

回复
举报

6075

帖子

6

TA的资源

版主

沙发
 

光传感器的通信接口是什么?

点评

I2C接口,这个传感器资料很少,说明书是外文的,学了好久。。。  详情 回复 发表于 2022-9-22 11:32
 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 
秦天qintian0303 发表于 2022-9-22 10:35 光传感器的通信接口是什么?

I2C接口,这个传感器资料很少,说明书是外文的,学了好久。。。

 
 
 

回复

6788

帖子

2

TA的资源

版主

4
 

这个是可以检测多种波长的光吗?

 
 
 

回复

682

帖子

1

TA的资源

一粒金砂(高级)

5
 

我们用的手机上就有这个sensor。。。。

接听电话时脸部挨近手机屏时屏幕会暗。。。。

点评

对头,顾客是用来检测专感器好坏用的。  详情 回复 发表于 2022-9-22 21:23
 
 
 

回复

6841

帖子

11

TA的资源

版主

6
 
Orima 发表于 2022-9-22 20:09 我们用的手机上就有这个sensor。。。。 接听电话时脸部挨近手机屏时屏幕会暗。。。。

对头,顾客是用来检测专感器好坏用的。

 
 
 

回复

539

帖子

1

TA的资源

纯净的硅(中级)

7
 
高产哥啊,确实挺好玩的。有没有做其他传感器的连接调试工程玩?

点评

最近刚好做一个测试架,顺便拿出来完成作业 。。。手头上的sht30什么的  详情 回复 发表于 2022-9-25 08:08
 
 
 

回复

6841

帖子

11

TA的资源

版主

8
 
Honghuzaitian 发表于 2022-9-25 00:49 高产哥啊,确实挺好玩的。有没有做其他传感器的连接调试工程玩?

最近刚好做一个测试架,顺便拿出来完成作业 。。。手头上的sht30什么的

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 

您好,stk33b62 是手机上很小那种传感器吗

点评

对的,是客户拿过来做测试架用的。  详情 回复 发表于 2023-3-22 17:48
 
 
 

回复

6841

帖子

11

TA的资源

版主

10
 
zhoulichuan 发表于 2023-3-22 17:34 您好,stk33b62 是手机上很小那种传感器吗

对的,是客户拿过来做测试架用的。

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
lugl4313820 发表于 2023-3-22 17:48 对的,是客户拿过来做测试架用的。

感谢您对回复,我最近也在调试该芯片,但是IIC ack没有响应,可以借鉴您的代码吗

 
 
 

回复

6841

帖子

11

TA的资源

版主

12
 

代码就在帖子里了的。复制过去就行了。

 
 
 

回复

2625

帖子

6

TA的资源

五彩晶圆(初级)

13
 

来这里点个赞

点评

感谢大佬支持。  详情 回复 发表于 2023-3-23 17:29
个人签名

希望做一些大家觉得好用的东西!

 
 
 

回复

6841

帖子

11

TA的资源

版主

14
 

感谢大佬支持。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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