• 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传感器的数据   
    }
    
  • 相关阅读:
    Vue之路由简单运用
    c++的概述(二)
    数据安全常用术语表 V0.1 附下载地址
    WPSpell将拼写检查添加到VCL应用程序
    ffmpeg视频编码原理和实战-(4)H264原始码流分析
    本地jar导入maven
    讲解LCD1602自定义字符原理
    C#使用委托/跨线程给控件赋值
    input空格回车输入标签
    自动化运维工具——ansible概述和部署
  • 原文地址:https://blog.csdn.net/qq_54674051/article/details/126979375