# LED_MATRIX驱动使用说明 #### 物理接口 led_matrix使用hub75接口驱动,驱动信号包括: 数据线:RGB0 3bit、RGB1 3bit、RGB2 3bit(预留)、RGB3 3bit(预留) 时钟线:1bit 控制线:行地址ABCD 4bit 、LAT锁存信号(高电平锁存)1bit、OE使能信号(低电平使能行输出) 1bit #### 软件接口实现 使用 esp32 SDK 库中的 lcd_i80 接口实现16位并行数据输出,实现时钟线驱动下16bit数据的并行输出,并且内部采用dma方式传输; 使用 ledc PWM 实现 LAT 和 OE 信号的定时控制:LAT信号在定时器周期快结束时拉高锁存;OE信号在定时器周期中先低有效后高无效行输出,PWM占空比决定显示亮度,注意占空比设置必须在OE锁存信号之前;在定时器溢出中断中发送下一次显示的数据; 在 ulp riscv 协处理器中轮询捕获OE高电平,并在一次高电平中修改一次行地址(使用flag和CPU同步实现)。 #### 文件组成 main/ * esp_lcd_common.h * esp_lcd_panel_io_i80_hub75.c esp_lcd_panel_io_i80_hub75.h * led_matrix.c led_matrix.h * ulp/main.c #### 文件说明 原 SDK 库中 esp_lcd_panel_io_i80.c、esp_lcd_panel_io_i80.c 实现的i80接口对某些引脚有检查,所以修改了某些检查,同时利用结构体中的format_buffer作为缓冲区,添加了一些结构体表项,并实现了映射以及发送数据的函数,作为文件 esp_lcd_panel_io_i80_hub75.c、esp_lcd_panel_io_i80_hub75.h,esp_lcd_common.h是其依赖头文件; led_matrix.c、led_matrix.h 文件中对 led_matrix 整体进行初始化,并提供接口供用户调用。若后期板子大小做出调整,可以修改该文件的相关内容; ulp/main.c 中是协处理器代码,注意需要编写main/CMakeLists.txt将协处理器代码嵌入进工程。 #### 遗留问题 format_buffer 缓冲区出现过溢出问题,覆盖结构体其他表项,导致程序 panic ,*2后解决,但是并未发现原有分配大小有问题; 当亮度越大即OE使能越大时(超过1800),失能能到死区时间很少,导致地址线的改变不够及时,会导致对其他行的干扰。协处理器中对于地址的更新是一个一个设置的,可以直接写寄存器一次性设置,加快执行速度,优化这个问题; 刷新频率当前设置60HZ(刷整个8遍算一次),30HZ会导致闪烁严重。