本应用笔记描述了在智能手机和平板电脑等便携式设备中正确使用MAX9635环境光传感器的中断输出功能进行LCD背光管理。中断功能允许调整多个照明区域的光阈值,而无需反复轮询光传感器。如果使用得当,此功能允许系统保持低功耗睡眠模式或将其他资源专用于其他用户定义的任务。中断功能显著提高了能源效率、系统性能和用户在不同照明条件下的体验。本文还给出了一个用于对中断进行编程的I²C C伪代码示例。
介绍
MAX9635环境光传感器采用先进的技术检测环境光的亮度。该器件可用于多种应用,包括但不限于便携式和家用电子产品以及室内照明中的显示 LCD 背光调节。MAX9635具有极低的工作功耗(仅为0.65μA)和1.8V工作电压(设计用于方便与微控制器I/O端互),使其非常适合用于许多传感器和安全应用。背光调节和低工作功耗可延长电池寿命并提高照明应用的能源效率。
MAX9635最有价值的特性之一是高度通用的中断输出引脚。此引脚允许系统保持低功耗休眠状态或将资源专用于其他用户有价值的任务。
本应用笔记解释了如何对此中断输出功能进行编码,以确保最佳系统性能。给出了一些示例 C 风格的伪代码。
寄存器预设
下表显示了MAX9635的寄存器图,以及上电复位(POR)状态。
注册 | 位 | 寄存器地址 | 上电复位状态 | R/W | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
地位 | |||||||||||
中断状态 | — | — | — | — | — | — | — | INTS | 0x00 | 0x00 | R |
中断使能 | — | — | — | — | — | — | — |
INTE |
0x01 | 0x00 | R/W |
配置 | |||||||||||
配置 | CONT | MANUAL | — | — | CDR | T | 0x02 | 0x03 | R/W | ||
LUX reading | |||||||||||
LUX high byte | — | — | — | — | M3 | M2 | M1 | M0 | 0x04 | 0x00 | R |
阈值集 | |||||||||||
上限阈值高字节 | UE3 | UE2 | UE1 | UE0 | UM7 | UM6 | UM5 | UM4 | 0x05 | 0xFF | R/W |
下限阈值高字节 | LE3 | LE2 | LE1 | LE0 | LM7 | LM6 | LM5 | LM4 | 0x06 | 0x00 | R/W |
阈值计时器 | T7 | T6 | T5 | T4 | T3 | T2 | T1 | T0 | 0x07 | 0xFF | R/W |
预设寄存器包括配置、中断使能和阈值定时器。
配置寄存器(地址 0x02)、CONT=0 和 MANUAL=0 的上电设置足以满足大多数用户应用的需求。这些设置告诉MAX9635根据适当的环境光水平自动调整其灵敏度。
为了启用中断功能,主机(即微控制器)首先向中断启用寄存器(地址 1x0)写入 01。
然后,主机将适当的延迟写入阈值定时器寄存器(地址0x07)。通常,此设置不会更改。编写此阈值延迟有两个主要原因。首先,将非零值写入此寄存器可防止由于光照条件的短暂或瞬时变化而导致的误跳闸。当用户手势或设备移动后,阴影经过光传感器时,可能会发生短暂的光线变化。其次,显示器亮度响应的有意延迟为定义的用户界面算法留出了时间。这方面的一个例子是像iPad™设备这样的移动应用程序。在这个例子中,人们不希望显示器亮度在通过黑暗的走廊(如被周期性灯光打断的地铁)时快速波动。
阈值寄存器设置
在正常操作期间,用户重复编程上限阈值寄存器(地址0x05)和下限阈值寄存器(地址0x06)。当环境光水平超过这些寄存器定义的窗口电平时,将触发中断(寄存器0x00中的INTS位设置为1,/INT硬件引脚被拉低)。此中断的持续时间将超过阈值计时器寄存器(地址 0x07)定义的延迟。
为了对阈值寄存器设置进行编程,主机首先从数据寄存器中读取勒克斯计数,LUX高字节(地址0x03)和LUX低字节(地址0x04),以找到当前工作区。然后,主站设置适当的上限阈值寄存器和下限阈值寄存器计数。
背光控制算法示例
人眼以对数方式感知亮度,其方式与人耳感知响度的方式大致相同。因此,背光强度通常经过编程,使其也以对数方式响应环境光水平。因此,在低光水平下有更精细的步进,而在明亮的环境条件下,背光强度变化不大。理想情况下,主机处理器还将实现其他高级图像处理算法,例如基于此环境光水平信息的对比度和颜色调整。
典型的亮度控制算法可能有五个控制阈值级别。通常,界面玻璃的类型和物理开口的大小可以将光传感器“看到”的光减少到外部环境光的5%至10%。在设置阈值水平时,应考虑此缩放。
下表是背光强度以及上限和下限阈值的一个示例。要将阈值勒克斯转换为阈值计数,只需将目标勒克斯设置除以 0.045。
照明区 | 外部照度(典型值) | 背光强度(%) | 外部勒克斯,下限阈值(典型值) | 外部勒克斯,上限阈值(典型值) | 下限阈值(10% 玻璃) | 上限阈值(10% 玻璃) |
黑暗 | 4 | 25 | < 0 | > 10 | < 0 | > 1 |
䵨 | 20 | 45 | < 10 | > 50 | < 1 | > 5 |
家 | 100 | 65 | < 50 | > 200 | < 5 | > 20 |
办公室 | 400 | 85 | < 200 | > 1000 | < 20 | > 100 |
阳光 | > 2000 | 100 | < 1000 | >最大值 | < 100 | >最大值 |
随外部照明条件改变背光强度。
实现中断
下图显示了主微控制器实现的流程图的典型示例。
算法阈值水平和环境测量:计数与勒克斯
根据计数而不是勒克斯值实现算法更直接。这样做无需使用任何浮点数学运算,并允许简单的定点微控制器代码。
环境光计数 | 2^(指数) × 尾数 |
指数 = 8xE3 + 4xE2 + 2xE1 + E0 | |
尾数 = 128xM7 + 64xM6 + 32xM5 + 16xM4 + 8xM3 + 4xM2 + 2xM1 + M0 | |
上限阈值计数 | 2^(指数) × 尾数 |
指数 = 8xE3 + 4xE2 + 2xE1 + E0 | |
尾数 = 128xM7 + 64xM6 + 32xM5 + 16xM4 + 15 | |
较低的阈值计数 | 2^(指数) × 尾数 |
指数 = 8xE3 + 4xE2 + 2xE1 + E0 | |
尾数 = 128xM7 + 64xM6 + 32xM5 + 16xM4 |
使用上表中所需的阈值,可以计算阈值寄存器字节,以用作每个照明区域的伪代码中的限制。这些阈值与根据上述公式计算的环境光计数进行了简单比较。
区 | 下限阈值,10% 玻璃 (勒克斯) | 上限阈值,10% 玻璃(勒克斯) | 所需的下限阈值计数 | 所需的阈值上限计数 | 下限阈值寄存器字节 | 上限阈值寄存器字节 | 实际下限阈值计数 | 实际上限阈值计数 | 实际下限阈值 | 实际上限阈值 |
黑暗 | < 0 | > 1 | 0 | 22 |
0000 0000 |
0000 0001 |
0 | 31 | < 0 | > 1.395 |
䵨 | < 1 | > 5 | 22 | 111 |
0000 0001 |
0000 0110 |
16 | 111 | < 0.72 | > 4.995 |
家 | < 5 | > 20 | 111 | 556 |
0000 0110 |
0010 1001 |
96 | 636 | < 4.32 | > 28.62 |
办公室 | < 20 | > 100 | 556 | 2222 |
0010 1001 |
0100 1000 |
576 | 2288 | < 25.92 | > 102.96 |
阳光 | < 100 | >最大值 | 2222 | 4177920 |
0100 1000 |
1110 1111 |
2048 | 4177920 | < 92.16 | > 188006 |
应该注意的是,如果工作光水平非常接近定义的照明区域的边界,背光水平可能会更频繁地波动并给用户带来不适。因此,在一个照明区域的上限阈值和下一个较高照明区域的下限阈值之间定义了一个小的重叠区域。这提供了一个自然的滞后,作为对小光波动的屏蔽。如果需要,可以进一步扩展这些重叠。
这里描述的算法只是背光亮度控制的一种可能实现的一般准则。那些精通背光控制技术的人已经开发了许多不同的算法,为最终用户提供复杂而透明的感觉。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !