文章目录
- 前言
- 一、WS2812简介
- 二、WS2812配置说明
- 三、波形图绘制
- 1.配置模块
- 2.控制模块
- 总结
前言
RGB888点阵是一个由64个WS2812 RGB LED灯珠组成的点阵显示屏,可以用于艺术装饰、玩具和游戏、时钟计时器和状态指示器等各种场景。
本文将向各位读者展示,如何利用FPGA驱动该8x8点阵显示屏,使得点阵显示特定的字符信息。
一、WS2812简介
WS2812 RGB LED灯珠广泛应用于LED灯带、室内和户外装饰照明、信号指示灯、车载设备等方面,由于它可以通过简单的控制器控制多个LED灯珠的颜色和亮度,因此具有非常广泛的市场前景。
二、WS2812配置说明
根据WS2812特性可知,要实现8x8图像的显示,就必须要配置64x24个数据,在设计中可以把配置64个数据和配置24个数据这两部分分开,在设计时,可以分成三个模块来实现此功能:配置模块、控制模块和顶层模块。
配置模块用来指示需要配置的是64个RGB LED灯中的哪一个,并提供开始配置信号和待显示的24位图像信息,将上述信号提供给控制模块完成对LED灯显示与色彩信息的配置。
控制模块用来配置配置模块发送过来的24位图像信息,对每一位进行解码然后按照特定格式发送“0”或者发送“1”,当配置完成24x64个数据并持续一段时间的低电平复位,就能够驱动8x8点阵显示了。
顶层模块用来级联配置模块和控制模块,此处不再过多叙述。
发送的“0”码或者“1”码配置规则如下图所示:
在本设计中,设定发送“0”码的总时间为1180ns,其中高电平占据300ns;发送“1”码的总时间为1280ns,其中高电平占据640ns;复位总时间为300us。
三、波形图绘制
1.配置模块
配置模块信号波形图如下图所示:
如图所示,cfg_start信号为控制模块每完成一个24bit数据的配置,就发送拉高信号告知配置模块可以开始配置下一个24bit数据了。需要注意的是,cnt_wait信号为上电等待信号,这里人为设定等待20ms等待电源电压稳定、器件初始化和内部元件自适应调节,等待完成之后拉高start_en,指示器件开始工作。cfg_num是指示配置了多少个LED灯,cfg_data是指示需要向该LED灯里面写入什么数据去配置它,ws2812_start是控制模块的开始配置信号,与cfg_num和cfg_data是保持同步的。
2.控制模块
控制模块状态转移图如下图所示:
如图所示,初始时控制模块状态为空闲IDLE状态,即不进行任何数据的配置,当检测到配置模块发送的开始信号时,空闲状态就会跳转到仲裁ARBIT状态,仲裁状态仲裁发送的24位数据,每一位应该是发“0”还是发“1”,每一次发“0”或者发“1”完成后,又重新回到仲裁状态仲裁下一个数据的发送状态(“0”或“1”).当发送完成64x24个数据时,表明一副8x8图像数据配置完成,此时跳转都复位RST状态,数据持续发送一段时间低电平,结束后又重新回到空闲IDLE状态等待配置模块的开始信号到来,再继续开始配置。
控制模块信号波形图如下图所示:
如图所示,cfg_data为待配置的24位数据,这里为了描述状态的跳转,假设配置的前两位数据分别位“0”和“1”,cfg_num初始为不定态,表示配置的是哪一个LED灯是不关心的,ws2812_start为该模块的开始工作信号。
skip_en_0为仲裁状态跳转到发“0”码状态的跳转信号,或者是发“0”码状态跳转到仲裁状态的跳转信号;skip_en_1为仲裁状态跳转到发“1”码状态的跳转信号,或者是发“1”码状态跳转到仲裁状态的跳转信号;skip_en_rst为发“0”码或者“1”码状态跳转到复位状态的跳转信号,或者是复位状态跳转到空闲状态的跳转信号。
n_state为次态,c_state为现态,两者具有一个时钟周期的差异。cnt_wait为全局计数器,计数仲裁、发“0”码或者“1”码、复位状态的时间,data为解码得到的24bit待配置数据的每一位数据,cnt_num位配置的数据个数,最多配置24个数据。
led_data为输出信号,根据led_data高低电平持续时间不同,用来指示配置的LED灯不同的色彩信息。如图所示,发送“0”码总时间为SEND_ZERO_time+ARBIT_time=1180ns,高电平占据300ns;发送“1”码总时间为SEND_ONE_time+ARBIT_time=1280ns,高电平占据640ns。
cfg_start为输出给配置模块的开始配置信号,该信号在控制模块每配置完成24bit图像数据时会拉高。
总结
本文介绍了如何利用FPGA驱动RGB888点阵显示屏显示特定的字符信息,详细阐述了配置模块和控制模块之间的协作关系,以及两个模块之间的信号传递图示以及每个信号的作用。下一章演示颜色识别与RGB88点阵关联效果。