简介:这里我们使用了一片SN3112来控制led灯的亮灭,SN3112是一片12路led控制芯片。每路单独256级亮度可控,CPU通过I2C接口对其进行编程控制。通过将SDB脚拉低或者软件设置可关断芯片,进入低功耗模式。
SN3112寄存器功能列表:
地址 | 名称 | 功能 | 默认值 |
00h | 关断寄存器 | 软件关断SN3112(0x00为关断,0x01为打开) | 0x00 |
04h~0fh | PWM控制寄存器 | 存储12路led灯的pwm亮度值 | 0x00 |
13h | LED控制寄存器1 | 存储1~3路led开关状态(BIT3~5) | 0x00 |
14h | LED控制寄存器2 | 存储4~9路led开关状态(BIT0~5) | 0x00 |
15h | LED控制寄存器3 | 存储11~12路led开关状态(BIT0~2) | 0x00 |
16h | 数据更新寄存器 | 更新各寄存器中的数据 | xx |
17h | 复位寄存器 | 重置各寄存器数据 | xx |
LED呼吸灯非线性修正
SN3112内部实现线性256级灰度PWM调光。由于人视觉对亮度的误差,电流线性增加时,视觉上会感到呼吸灯开始时亮度变化快,然后进入饱和状态。故在此使用32级亮度的伽马补偿数据:
C0 | C1 | C2 | C3 | C4 | C5 | C6 | C7 |
0 | 1 | 2 | 4 | 6 | 10 | 13 | 18 |
C8 | C9 | C10 | C11 | C12 | C13 | C14 | C15 |
22 | 28 | 33 | 39 | 46 | 53 | 61 | 69 |
C16 | C17 | C18 | C19 | C20 | C21 | C22 | C23 |
78 | 86 | 96 | 106 | 116 | 126 | 138 | 149 |
C24 | C25 | C26 | C27 | C28 | C29 | C30 | C31 |
161 | 173 | 186 | 199 | 212 | 226 | 240 | 255 |
MT6572这边,我采用的GPIO模拟I2C通信的方式与SN3112进行通信,其中GPIO102连接SCL叫,GPIO138连接SDA脚,GPIO141连接SDB即使能脚,在dct配置GPIO引脚时要记得进行相关配置。