OPT3001驱动代码应该怎么写

OPT3001自学笔记

OPT3001是一款低功耗环境光照度采集IC,之前的项目中有用到这颗芯片,因此在这里给大家分享一下,如果这篇文章刚好能帮到你那就更好了。

一、OPT3001的寄存器

单片机是通过IIC协议读写OPT3001的寄存器来控制OPT3001的。所以我们要驱动这个芯片就必须先去了解它的寄存器。OPT3001有6个寄存器,都是16位寄存器,如下图1所示。
图1 OPT3001寄存器
1、 结果寄存器(地址:0x00):OPT3001采集完之后,光照数据就是存在这里。
结果寄存器有16位,前4位是指数(用E[3:0]表示),后12位是尾数(用R[11:0]表示)。
计算光照强度的公式为:光照强度=0.01x2 E[3:0] x R[11:0] (单位:lx 勒克斯)
如:寄存器的数值为0x2356,2是指数,356是尾数,换算成十进制为854。那么光照强度为:0.01x22x854=34.16 lx

2、 配置寄存器(地址:0x01):配置OPT3001采集的方式
16位配置寄存器具体如表1所示:

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
RN[3] RN[2] RN[1] RN[0] CT M[1] M[0] OVF CRF FH FL L POL ME FC[1] FC[0]

15~12 RN - 配置测量光照的范围,当配置位1100传感器测量范围自动选择
11 CT - 测量时间配置 0- 100Ms 1-800Ms
10:9 M[1:0] - 转换模式:00:关闭模式 01:单次转换 10、11:连续转换
8 OVF - 测量光照超出设定的范围或最大测量值 溢出标志
7 CRF - 转换就绪字段 1-转换完成
6 FH - 转换的光照值 大于上限值 置位
5 FL - 转换的光照值 小于下限值 置位
4 L - 中断输出的两种模式:1-窗口模式:这种模式下高限置位和低限置位INT输出,0-滞后模式:高限置位INT输出 具体看手册
3 POL - INT 中断被触发输出极性 0:拉低 1:拉高
2 ME - 掩码字段
0:1 FC - 超出上限范围故障计数,如果超出次数,大于等于计数设定次,INT输出中断

注:若要用窗口锁存模式,OPT3001触发中断后需要读取配置寄存器才能清除标志位。

3、 下限寄存器(地址:0x02):设置触发下限,如果要用中断方式触发,需要用到

4、 上限寄存器(地址:0x03):设置触发上限,如果要用中断方式触发,需要用到

5、 产商ID寄存器(地址:0x7E):只读寄存器,固定为0x5449

6、 设备ID寄存器(地址:0x7F):只读寄存器,固定为0x3001

二、OPT3001的工作模式

1、OPT3001自动采集转换数据,但不主动上报,单片机需要数据的时候去读取,计算。
测量时间可以设置为100ms或者800ms,转换方式配置为连续转换,配置寄存器可以设为:0xCE10或者0xC410。
2、OTP3001自动采集转换数据,超过上限或下限会触发中断,单片机可以通过读取配置寄存器清除OPT3001的中断。
测量时间可以设置为100ms或者800ms,转换方式配置为连续转换,中断输出极性可以是高电平也可以是低电平,配置寄存器可以设为:0xCE10或者0xCE18。

三、读写OPT3001的寄存器

1、写入数据的步骤如下:
1)IIC发送器件地址+读/写位,器件地址和ADDR的状态有关,具体如图2所示。如:ADDR接地,发送的读取命令为:10001000,即0x88,前7位是器件地址,最后一位0是读/写位,0是写入,1是读取。
2)IIC发送需要写入数据的寄存器地址。如:需要写入配置寄存器,则发送0x01。
3)IIC发送需要写入的数据(两个字节,分两次发送)。如往配置寄存器连续发送0xCE,
0x10。
2、读取的步骤如下:
1)IIC发送器件地址+读/写位,器件地址和ADDR的状态有关,具体如图2所示。如:ADDR接地,发送的读取命令为:0x88。
2)IIC发送需要读取数据的寄存器地址。如:需要读取结果寄存器,则发送0x00。
3)IIC发送器件地址+读/写位,器件地址和ADDR的状态有关,具体如图2所示。如:ADDR接地,读取的读取命令为:0x89。
4)IIC连续接收两个字节的数据。
图2 OPT3001器件地址

四、完整的IIC通讯过程

1、 写入过程
1)发送起始信号
2)发送发送器件地址+0
3)发送应答位
4)发送寄存器地址
5)发送应答位
6)发送数据高8位
7)发送应答位
8)发送数据低8位
9)发送应答位
10)发送停止信号

2、读取过程
1)发送起始信号
2)发送发送器件地址+0
3)发送应答位
4)发送寄存器地址
5)发送应答位
6)发送发送器件地址+1
7)接收数据高8位
8)发送应答位
9)发送数据低8位
10)不发送应答位
11)发送停止信号
IIC读取和写入的时序图如图3所示。
图3 IIC时序图
关于OPT3001这款芯片就介绍到这里,如果还有什么问题或者文章中有哪些地方写的不对,都可以联系我,大家相互学习相互进步。

想要驱动源码的同学可以在下面的链接下载
添加链接描述
添加链接描述