内容提要
本文介绍了在USB电流表固件项目中使用OLED屏幕和I2C协议的方法,包括复制驱动代码、解释I2C协议工作原理、计算屏幕刷新帧率、选择和使用点阵字体以及编写字符显示驱动并进行测试。文章提供了USB电流表的开源地址。
延伸解读
I2C 协议在 OLED 驱动中的角色
文章选用 SSD1306 驱动芯片的 0.96 寸 OLED,并采用 I2C 通信。I2C 仅需 SDA 和 SCL 两根线,支持主从架构,适合引脚资源有限的 CH32V003。作者从 CH32V003-GameConsole 项目复制了 OLED 和 I2C 驱动代码,放入 src/drivers 目录,减少了底层开发工作量。这种复用方式在嵌入式开发中常见,但需注意不同项目间的函数定义差异。
刷新帧率计算与实际影响
CH32V003 的 I2C 可工作在快速模式,速率 400kbit/s。屏幕分辨率 128x64,单色每像素 1 bit,全屏数据量 6912 bits,理论刷新率约 57.87 FPS。考虑其他代码执行时间,实际可达 30 FPS 以上。作者指出刷新率影响数据流畅度、CPU 占用和操作响应,对 USB 电流表而言 30 FPS 已足够及时。
点阵字体的存储与显示原理
文章选用 ModernDos 等宽字体,每个字符 8x16 像素,占 16 字节。字体文件包含 ASCII 32~126 共 128 个字符,总占用 1520 字节。显示时需将字体数据按 SSD1306 水平地址模式旋转,使每个字节对应垂直 8 像素。作者编写 display_write_line 函数查表并写入缓存,再通过 display_flush 发送到 OLED。
显示布局与后续开发方向
作者将屏幕分为 4 行,每行 16 个字符,用于显示电压、电流、功率和累计电量。测试时用模拟数据验证显示效果,如“Volt : 5000mV”。目前尚未接入 ADC,下一步将读取 INA219 数据,完成核心测量功能。项目已开源,包含固件、PCB、原理图和外壳文件,便于复现和二次开发。
Q&A
如何在USB电流表项目中使用OLED屏幕?
在USB电流表项目中,可以通过复制CH32V003-GameConsole项目中的OLED驱动代码,并使用I2C协议进行通信来实现OLED屏幕的使用。
I2C协议的工作原理是什么?
I2C协议是一种串行通信协议,使用两根线进行数据传输和时钟信号同步,支持主从架构,适合短距离数据传输。
如何计算OLED屏幕的刷新帧率?
OLED屏幕的刷新帧率可以通过通信速率和屏幕分辨率计算,理想情况下可达57.87 FPS,实际可达30 FPS以上。
在USB电流表中如何选择合适的点阵字体?
可以选择ModernDos字体,适合在128x64分辨率的OLED屏幕上显示字符,确保字符清晰可读。
USB电流表项目的开源地址在哪里?
USB电流表项目的开源地址是https://github.com/ohdarling/CH32V003-USBMeter,包含固件代码和相关文件。
如何编写字符显示驱动?
需要定义内存区域作为显示数据缓存,并编写函数将字符串中的字符数据查找并写入缓存,然后发送到OLED驱动显示。