简介:
LPD6803是专为LED灯光系统设计的驱动芯片,它采用先进的高压CMOS工艺,提供三路恒流驱动和灰度调制输出,特别适合离散的多灰度全彩色灯光系统。
LPD6803芯片包括串行移位寄存器和级联驱动短路,灰度数据在时钟上沿移入串行移位寄存器,转储后经脉宽转为3端口并行输出,串行移位寄存器和灰度计数器可以有不同的时钟信号控制。同时,LPD6803将数据和控制信号经内部驱动后输出给下一级电路。
LPD6803的基本框图和基本时序及案例
A、 先移入32BIT的‘0’作为起始帧,再移入各数据帧,起始帧和数据帧均是高位先移入,每个数据位在DCLK上升沿被打入;
B、 第一个数据帧是对应距移入端最近LED灯,其格式包括1比特起始位 ‘1’ + 三组 5 比特的灰度值;
C、 依次移入各点数据后,加对应点数的附加脉冲,新数据即开始失效。
控制电路与软件设计参考:
通过CMODE管脚的设置,LPD6803的灰度计数器可采用DCLK作为时钟源(CMODE=0),也可以用内置的1.2MHz(误差±15%)震荡器输出作为时钟源(CMODE=1或悬空),前者一般配合基于CPLD/FPGA等成本较高的控制系统,后者则常用于低成本的单片机控制系统。
在CMODE=1模式,MCU通过SPI或二根GPIO口线把显示数据打入芯片,其后各芯片按照打入的灰度值自动产生相应占空比的驱动输出,数据传输完毕后,MCU可以处理其他事务,此期间各LPD6803将继续保持原占空比的驱动输出(FREE_RUN模式),直至MCU发出下一组的更新数据为止。
注意:在DCLK的上升沿把所有数据打入芯片的过程结束后,需要多发送若干个DCLK脉冲(DIN=0),原则上传输链中有多少组点就多发相应数目的脉冲,这是为了让后续芯片内置的锁相再生电路能够正常工作所必须的。
为了使LPD6803仅用较少的数据产生更细腻的灰度层次,当GMODE=0/CMODE=0时,芯片内置的SUPER_PWM机制可以把5比特的数据转换为非线性的256及灰度输出,最小开启宽度为1T,最大开启宽度为256T(T为灰度时钟源周期)。
当GMODE=1或悬空时,输出为线性32级灰度,最小开启宽度为4T,最大开启宽度为128T。
C51例程:
//SDO,SCK为数据和移位输出口,位变量,nDots为灯的个数
//本程序仅适用于GMODE=1,CMODE=1的情况
//首先输出32个‘0’的起始帧
SCLK = 0;
SDO = 0;
for(i=0; i < 32; i++)
{SCLK = 1; SCLK = 0;}
//再输出nDots 点的数据,这里假设个点的颜色都是(dr , dg , db)
//dr ,dg , db 为红绿兰的灰度值 0---31
for(i=0 ; i < nDots ; i++)
{
SDO = 1 ; SCLK = 1; SCLK = 0; //首先输出1个‘1’起始帧
// 输出5位红色数据
mask = 0x10;
for(j=0; j < 5; j++)
{
if(mask & dr) SDO =1;
else SDO = 0;
SCLK = 1; SCLK = 0;
mask >>= 1;
}
//输出5位绿色数据
mask = 0x10;
for(j=0; j < 5; j++)
{
if(mask & dg) SDO =1;
else SDO = 0;
SCLK = 1; SCLK = 0;
mask >>= 1;
}
//输出5位兰色数据
mask = 0x10;
for(j=0; j < 5; j++)
{
if(mask & db) SDO =1;
else SDO = 0;
SCLK = 1; SCLK = 0;
mask >>= 1;
}
}
//输出完nDots的数据后,还要补nDots 个脉冲
SDO = 0;
for(i=0; i < nDots; i++)
{SCLK = 1; SCLK = 0;}
//传输结束
Delay(); // 这里加延时,或转去做其他处理待到一定时间后(比如1/30秒),再//过来刷新显示
文章评论(0条评论)
登录后参与讨论