25.STM32光传感器

1.光传感器

AP3216C是敦南科技退出的一款三合一环境传感器,它包含了:数字环境光传感器(ALS)、接近传感器(PS)和一个红外LED(IR)。该芯片通过IIC接口和MCU连接,并支持中断(INT)输出。
可以检测光强,接近,红外感应
光传感器特点
1.IIC接口
2.支持多种工作混合模式光强,接近,红外感应按要求配合使用
3.内置温度补偿电路
4.环境关传感器16位分辨率
5.接近传感器20位分辨率
6.红外传感器10位分辨率

AP3216C光传感器被广泛应用于智能手机上面,用来检测光强度(自动背光控制),和接近开关控制(听筒靠近耳朵,手机自动灭屏功能)。

2.AP3216C框图

请添加图片描述
8个引脚,
一个地,一个电源,
两个通信接口
LEDA与LEDC阴极与阳极
LED,LED驱动引脚,接入LEDC
INT,中断输出脚
AP3216C和我们的MCU只需要连接SCL、SDA和INT,就可以实现驱动。其SCL和SDA同24C02共用,连接在PH4和PH5上,INT脚连接在PCF8574的P1上。
请添加图片描述

3.硬件连接请添加图片描述

4.寄存器

请添加图片描述
0x00:系统模式,就是设置选择功能
0x0a:IR低位数据
0x0b:IR高位数据
0x0c与0x0d:ALS低位与高位数据
0x0E与0x0F:PS低位与高位数据

5.AP3216C操作

1.写寄存器
先启动,然后发送AP3216C的地址8位(最低位0表示写数据,1表示读数据),等待应答,随后发送寄存器地址,等待应答,最后发送内容
请添加图片描述
1.读寄存器
先启动,然后发送AP3216C的地址8位(最低位0表示写数据,1表示读数据),等待应答,随后发送寄存器地址(确定了地址),等待应答,然后重新发送起始信号,发送读数据的信号,
读取寄存器的值
请添加图片描述

5.AP3216C函数

写函数

u8 AP3216C_WriteOneByte(u8 reg,u8 data)
{
    IIC_Start();
    IIC_Send_Byte(AP3216C_ADDR|0X00);//发送器件地址+写命令
    if(IIC_Wait_Ack())          //等待应答
    {
        IIC_Stop();
        return 1;
    }
    IIC_Send_Byte(reg);         //写寄存器地址
    IIC_Wait_Ack();             //等待应答
    IIC_Send_Byte(data);        //发送数据
    if(IIC_Wait_Ack())          //等待ACK
    {
        IIC_Stop();
        return 1;
    }
    IIC_Stop();
    return 0;
}

读函数

u8 AP3216C_ReadOneByte(u8 reg)
{
    u8 res;
    IIC_Start();
    IIC_Send_Byte(AP3216C_ADDR|0X00); //发送器件地址+写命令
    IIC_Wait_Ack();             //等待应答
    IIC_Send_Byte(reg);         //写寄存器地址
    IIC_Wait_Ack();             //等待应答
	IIC_Start();                
    IIC_Send_Byte(AP3216C_ADDR|0X01); //发送器件地址+读命令
    IIC_Wait_Ack();             //等待应答
    res=IIC_Read_Byte(0);		//读数据,发送nACK  
    IIC_Stop();                 //产生一个停止条件
    return res;  
}

读取所有传感器数据

void AP3216C_ReadData(u16* ir,u16* ps,u16* als)
{
    u8 buf[6];
    u8 i;
    for(i=0;i<6;i++)	
    {
        buf[i]=AP3216C_ReadOneByte(0X0A+i);		//循环读取所有传感器数据
    }
    if(buf[0]&0X80)*ir=0;						//IR_OF位为1,则数据无效
	else *ir=((u16)buf[1]<<2)|(buf[0]&0X03); 	//读取IR传感器的数据  
	*als=((u16)buf[3]<<8)|buf[2];				//读取ALS传感器的数据   
    if(buf[4]&0x40)*ps=0;    					//IR_OF位为1,则数据无效
	else *ps=((u16)(buf[5]&0X3F)<<4)|(buf[4]&0X0F); //读取PS传感器的数据   
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值