博主最近在調(diào)試 AP3216C 三合一環(huán)境傳感器,由敦南科技推出的一款傳感器,支持環(huán)境光強(qiáng)度(ALS)、接近距離(PS)和紅外線強(qiáng)度(IR)這三個(gè)環(huán)境參數(shù)檢測(cè)。
1、前言
該芯片可以通過(guò) I2C 接口與主控制相連,并且支持中斷。
2、傳感器特性
- I2C 接口,快速模式下波特率可以到 400Kbit/S
- 多種工作模式選擇:ALS, PS+IR, ALS+PS+IR, PD 等等
- 內(nèi)建溫度補(bǔ)償電路。
- 寬工作溫度范圍(-30°C ~ +80°C)。
- 超小封裝,4.1mm x 2.4mm x 1.35mm
- 環(huán)境光傳感器具有 16 位分辨率(0~65535)。
- 接近傳感器和紅外傳感器具有 10 位分辨率(0~1023)。
- 4 個(gè)用戶可選動(dòng)態(tài)范圍
- Anti-flicker rejection (reject 50/60Hz)(防閃爍抑制)
- 高靈敏度@darkened glass
- 4 個(gè)可編程紅外 LED 電流輸出
- 高環(huán)境光抑制
- 串?dāng)_補(bǔ)償
- 符合 RoHS 安全標(biāo)準(zhǔn)
典型應(yīng)用
AP3216C 常被用于手機(jī)、平板、導(dǎo)航設(shè)備等,其內(nèi)置的接近傳感器可以用于檢測(cè)是否有物體接近,比如手機(jī)上用來(lái)檢測(cè)耳朵是否接觸聽(tīng)筒,如果檢測(cè)到的話就表示正在打電話,手機(jī)就會(huì)關(guān)閉手機(jī)屏幕以省電。 也可以使用環(huán)境光傳感器檢測(cè)光照強(qiáng)度,可以實(shí)現(xiàn)自動(dòng)背光亮度調(diào)節(jié)。
目標(biāo)設(shè)備
功能框圖
典型應(yīng)用電路
3、參考資料
《AP3216C_Preliminary_Datasheet_Rev0.86.pdf》
4、引腳說(shuō)明
5、工作模式
ALS,PS+IR,ALS+PS+IR,PD,ALS 一次,SW Reset,PS+IR一次和ALS + PS+IR一次。
6、I2C 讀寫(xiě)地址
從地址0x1E
7、寄存器
系統(tǒng)寄存器表
翻譯如下
0X00 這個(gè)寄存器是模式控制寄存器,用來(lái)設(shè)置 AP3216C 的工作模式,一般開(kāi)始先將其設(shè)置為 0X04,也就是先軟件復(fù)位一次 AP3216C。
接下來(lái)根據(jù)實(shí)際使用情況選擇合適的工作模式,比如設(shè)置為 0X03,也就是開(kāi)啟 ALS+PS+IR。
從 0X0A~0X0F 這 6 個(gè)寄存器就是數(shù)據(jù)寄存器,保存著 ALS、PS 和 IR 這三個(gè)傳感器獲取到的數(shù)據(jù)值。
如果同時(shí)打開(kāi) ALS、PS 和 IR ,讀取間隔最少要 112.5ms,因?yàn)?AP3216C 完成一次轉(zhuǎn)換需要 112.5ms。
8、代碼
博主用的是輪詢?nèi)プx數(shù)據(jù),大家也可以配置成中斷方式。
AP3216C.H
#define AP3216C_ADDR 0X1E
#define AP3216C_SYSTEMCONG 0x00
#define AP3216C_INTSTATUS 0X01
#define AP3216C_INTCLEAR 0X02
#define AP3216C_IRDATALOW 0x0A
#define AP3216C_IRDATAHIGH 0x0B
#define AP3216C_ALSDATALOW 0x0C
#define AP3216C_ALSDATAHIGH 0X0D
#define AP3216C_PSDATALOW 0X0E
#define AP3216C_PSDATAHIGH 0X0F
#define AP3216C_POWER_DOWN 0x00
#define AP3216C_ENABLE_ALL 0x03
#define AP3216C_SW_RESET 0x04
AP3216C 沒(méi)有 chip id 寄存器,我們先寫(xiě)一個(gè)值,然后讀出來(lái),如果相等,則表示器件存在。 同時(shí)將器件初始化。
u8 AP3216C_Check_And_Init(void)
{
u8 temp;
I2C_WriteOneByte(AP3216C_ADDR,AP3216C_SYSTEMCONG,AP3216C_SW_RESET); /* SW reset */
delay_ms(50);
I2C_WriteOneByte(AP3216C_ADDR,AP3216C_SYSTEMCONG,AP3216C_ENABLE_ALL); /* enable ALS PS IR */
temp=I2C_ReadOneByte(AP3216C_ADDR,AP3216C_SYSTEMCONG);
if(temp == AP3216C_ENABLE_ALL)
return 0;
else
return 1;
}
讀取數(shù)據(jù)
for(i = 0; i < 6; i++)
{
buf[i] = I2C_ReadOneByte(AP3216C_ADDR,AP3216C_IRDATALOW + i);
}
if(buf[0] & 0X80) /* IR_OF 位為 1,則數(shù)據(jù)無(wú)效 */
ir = 0;
else
ir = ((unsigned short)buf[1] << 2) | (buf[0] & 0X03);
als = ((unsigned short)buf[3] << 8) | buf[2];/* 讀取 ALS 數(shù)據(jù) */
if(buf[4] & 0x40) /* IR_OF 位為 1,則數(shù)據(jù)無(wú)效 */
ps = 0;
else
ps = ((unsigned short)(buf[5] & 0X3F) << 4) | (buf[4] & 0X0F);
printf("ALS:%u ,PS:%u ,IR:%u \\r\\n",als,ps,ir);
讀取數(shù)據(jù)過(guò)程中,IR 和 ps 需要先判斷數(shù)據(jù)是否有效,若有效再輸出,如注釋。
-
傳感器
+關(guān)注
關(guān)注
2551文章
51134瀏覽量
753903 -
接口
+關(guān)注
關(guān)注
33文章
8611瀏覽量
151247 -
接近傳感器
+關(guān)注
關(guān)注
5文章
189瀏覽量
24428 -
I2C
+關(guān)注
關(guān)注
28文章
1488瀏覽量
123848 -
環(huán)境傳感器
+關(guān)注
關(guān)注
2文章
73瀏覽量
18508
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論