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這款芯片就介紹到這裏,如果還有什麼問題或者文章中有哪些地方寫的不對,都可以聯繫我,大家相互學習相互進步。

想要驅動源碼的同學可以在下面的鏈接下載
添加鏈接描述
添加鏈接描述