OPT3001自學(xué)筆記
OPT3001是一款低功耗環(huán)境光照度采集IC,之前的項(xiàng)目中有用到這顆芯片,因此在這里給大家分享一下,如果這篇文章剛好能幫到你那就更好了。
一、OPT3001的寄存器
單片機(jī)是通過(guò)IIC協(xié)議讀寫(xiě)OPT3001的寄存器來(lái)控制OPT3001的。所以我們要驅(qū)動(dòng)這個(gè)芯片就必須先去了解它的寄存器。OPT3001有6個(gè)寄存器,都是16位寄存器,如圖1所示。
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 - 配置測(cè)量光照的范圍,當(dāng)配置位1100傳感器測(cè)量范圍自動(dòng)選擇
11 CT - 測(cè)量時(shí)間配置 0- 100Ms 1-800Ms
10:9 M[1:0] - 轉(zhuǎn)換模式:00:關(guān)閉模式 01:?jiǎn)未无D(zhuǎn)換 10、11:連續(xù)轉(zhuǎn)換
8 OVF - 測(cè)量光照超出設(shè)定的范圍或最大測(cè)量值 溢出標(biāo)志
7 CRF - 轉(zhuǎn)換就緒字段 1-轉(zhuǎn)換完成
6 FH - 轉(zhuǎn)換的光照值 大于上限值 置位
5 FL - 轉(zhuǎn)換的光照值 小于下限值 置位
4 L - 中斷輸出的兩種模式:1-窗口模式:這種模式下高限置位和低限置位INT輸出,0-滯后模式:高限置位INT輸出 具體看手冊(cè)
3 POL - INT 中斷被觸發(fā)輸出極性 0:拉低 1:拉高
2 ME - 掩碼字段
0:1 FC - 超出上限范圍故障計(jì)數(shù),如果超出次數(shù),大于等于計(jì)數(shù)設(shè)定次,INT輸出中斷
注:若要用窗口鎖存模式,OPT3001觸發(fā)中斷后需要讀取配置寄存器才能清除標(biāo)志位。
3、 下限寄存器(地址:0x02):設(shè)置觸發(fā)下限,如果要用中斷方式觸發(fā),需要用到
4、 上限寄存器(地址:0x03):設(shè)置觸發(fā)上限,如果要用中斷方式觸發(fā),需要用到
5、 產(chǎn)商ID寄存器(地址:0x7E):只讀寄存器,固定為0x5449
6、 設(shè)備ID寄存器(地址:0x7F):只讀寄存器,固定為0x3001
二、OPT3001的工作模式
1、OPT3001自動(dòng)采集轉(zhuǎn)換數(shù)據(jù),但不主動(dòng)上報(bào),單片機(jī)需要數(shù)據(jù)的時(shí)候去讀取,計(jì)算。測(cè)量時(shí)間可以設(shè)置為100ms或者800ms,轉(zhuǎn)換方式配置為連續(xù)轉(zhuǎn)換,配置寄存器可以設(shè)為:0xCE10或者0xC410。
2、OTP3001自動(dòng)采集轉(zhuǎn)換數(shù)據(jù),超過(guò)上限或下限會(huì)觸發(fā)中斷,單片機(jī)可以通過(guò)讀取配置寄存器清除OPT3001的中斷。測(cè)量時(shí)間可以設(shè)置為100ms或者800ms,轉(zhuǎn)換方式配置為連續(xù)轉(zhuǎn)換,中斷輸出極性可以是高電平也可以是低電平,配置寄存器可以設(shè)為:0xCE10或者0xCE18。
三、讀寫(xiě)OPT3001的寄存器
1、寫(xiě)入數(shù)據(jù)的步驟如下:
1)IIC發(fā)送器件地址+讀/寫(xiě)位,器件地址和ADDR的狀態(tài)有關(guān),具體如圖2所示。如:ADDR接地,發(fā)送的讀取命令為:10001000,即0x88,前7位是器件地址,最后一位0是讀/寫(xiě)位,0是寫(xiě)入,1是讀取。
2)IIC發(fā)送需要寫(xiě)入數(shù)據(jù)的寄存器地址。如:需要寫(xiě)入配置寄存器,則發(fā)送0x01。
3)IIC發(fā)送需要寫(xiě)入的數(shù)據(jù)(兩個(gè)字節(jié),分兩次發(fā)送)。如往配置寄存器連續(xù)發(fā)送0xCE,0x10。
2、讀取的步驟如下:
1)IIC發(fā)送器件地址+讀/寫(xiě)位,器件地址和ADDR的狀態(tài)有關(guān),具體如圖2所示。如:ADDR接地,發(fā)送的讀取命令為:0x88。
2)IIC發(fā)送需要讀取數(shù)據(jù)的寄存器地址。如:需要讀取結(jié)果寄存器,則發(fā)送0x00。
3)IIC發(fā)送器件地址+讀/寫(xiě)位,器件地址和ADDR的狀態(tài)有關(guān),具體如圖2所示。如:ADDR接地,讀取的讀取命令為:0x89。
4)IIC連續(xù)接收兩個(gè)字節(jié)的數(shù)據(jù)。
四、完整的IIC通訊過(guò)程
1、 寫(xiě)入過(guò)程
1)發(fā)送起始信號(hào)
2)發(fā)送發(fā)送器件地址+0
3)發(fā)送應(yīng)答位
4)發(fā)送寄存器地址
5)發(fā)送應(yīng)答位
6)發(fā)送數(shù)據(jù)高8位
7)發(fā)送應(yīng)答位
8)發(fā)送數(shù)據(jù)低8位
9)發(fā)送應(yīng)答位
10)發(fā)送停止信號(hào)
2、讀取過(guò)程
1)發(fā)送起始信號(hào)
2)發(fā)送發(fā)送器件地址+0
3)發(fā)送應(yīng)答位
4)發(fā)送寄存器地址
5)發(fā)送應(yīng)答位
6)發(fā)送發(fā)送器件地址+1
7)接收數(shù)據(jù)高8位
8)發(fā)送應(yīng)答位
9)發(fā)送數(shù)據(jù)低8位
10)不發(fā)送應(yīng)答位
11)發(fā)送停止信號(hào)
IIC讀取和寫(xiě)入的時(shí)序圖如圖3所示。
驅(qū)動(dòng)源碼下載鏈接:
https://download.csdn.net/download/shenzhen_zixian/11705851
https://download.csdn.net/download/shenzhen_zixian/11939529