led_matrix/README.md

2.4 KiB
Raw Blame History

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.hesp_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会导致闪烁严重。