AI8051单片机内部集成了一个单总线控制器。目前支持WS2812、DS18B20、DHT11等器件的控制,并支持通用红外发送接收模式。单总线支持直接寄存器读写数据,也支持DMA方式读写数据。
WS2812俗称:三色 RGB 灯,其中 LED 灯珠内部存在一个芯片控制控制芯片,通讯方式采用单线归零码的方法,使用DIN信号线来发送特定的时序数据,控制灯的工作与否,如果额外增加一路信号线,实现双路信号传输,即使存在某个LED灯异常损坏的时候,也不会影响整体显示效果。
1.5050 灯珠内部集成高质量外控单线级联恒流 IC和优质 RGB LED 芯片,体积小巧,外围简单。
2.内置 IC恒流精度高,内部 RGB 芯片预先分光处理。发光高度一致,白光效果纯正。
3.整形转发强化技术,单线数据传输,可无限级联。
4.数据传输频率 800Kbps/秒,可实现画面刷新速率 30 幀/秒时,不小于 1024 点。
5.输出端口 PWM 控制能够实现 256 级灰度调节,端口扫描频率 1.5KHz/s。
6.采用优化预置 12mA/通道恒流模式,低压驱动级联数量最大化。高恒流精度,片内误差<1.5%,片间误差<3%。
7.内置低压强化模块,VDD在 4.5-5.5V 以上 100%正常工作。
8.超强数据整形能力:接受完本单元数据自动将后续数据整形输出。
一:WS2812的通讯原理:
WS2812使用单线归零码协议:
位"0":高电平0.4μs,低电平0.85μs
位"1":高电平0.8μs,低电平0.45μs
复位码:低电平50μs以上
二:SPI驱动原理
通过SPI模拟WS2812的时序:
使用SPI时钟频率约为2.5-3.2MHz
每个SPI位对应WS2812的一位
通常用3个SPI位表示1个WS2812位
三:SPI通讯方式的关键要点
SPI频率选择:2.5-3.2MHz范围内调整以获得最佳效果
数据顺序:WS2812使用GRB顺序,不是RGB
复位时间:确保最后有足够长的低电平时间(>50μs)
缓冲区管理:提前准备好所有数据,一次性发送
时序精度:SPI方式比GPIO模拟更精确,适合大量LED
四:软件代码如下所示:
4.1 加载SPI 数据到发送buffer
void LoadSPI(void)
{
u8 xdata *px;
u16 i,j;
u8 k;
u8 dat;
for(i=0; i<SPI_NUM; i++) led_SPI[i] = 0;
px = &led_RGB[0][0]; //首地址
for(i=0, j=0; i<(LED_NUM*3); i++)
{
dat = *px;
px++;
for(k=0; k<4; k++)
{
if(dat & 0x80) led_SPI[j] = 0xE0; //数据1
else led_SPI[j] = 0x80; //数据0
if(dat & 0x40) led_SPI[j] |= 0x0E; //数据1
else led_SPI[j] |= 0x08; //数据0
dat <<= 2;
j++;
}
}
}4.2 SPI 发送数据
void SPI_DMA_TxTRIG(u8 xdata *TxBuf, u16 num)
{
u16 j;
HSSPI_CFG = SS_HOLD | SS_SETUP; //SS_HOLD会增加N个系统时钟, SS_SETUP没有增加时钟。
HSSPI_CFG2 = HSSPIEN | FIFOEN | SS_DACT; //FIFOEN允许FIFO会减小13个时钟, 67T @8分频.
j = (u16)TxBuf; //取首地址
DMA_SPI_TXAH = (u8)(j >> 8); //发送地址寄存器高字节
DMA_SPI_TXAL = (u8)j; //发送地址寄存器低字节
DMA_SPI_AMTH = (u8)((num-1)/256); //设置传输总字节数 = n+1
DMA_SPI_AMT = (u8)((num-1)%256); //设置传输总字节数 = n+1
DMA_SPI_ITVH = 0; //增加的间隔时间,N+1个系统时钟
DMA_SPI_ITVL = 0;
DMA_SPI_STA = 0x00;
DMA_SPI_CFG = DMA_SPIIE | SPI_ACT_TX | DMA_SPIIP | DMA_SPIPTY;
DMA_SPI_CFG2 = SPI_WRPSS | SPI_SSS;
DMA_SPI_CR = DMA_ENSPI | SPI_TRIG_M | SPI_CLRFIFO;
P10 = 1;
}4.3 SPI的中断处理部分:
void SPI_DMA_ISR (void) interrupt DMA_SPI_VECTOR
{
P10 = 0;
DMA_SPI_STA = 0; //清除中断标志
}五:实物测试如下所示:

我要赚赏金
