用树莓派Pico制作VFD显示屏,然后山寨小方屏

reiyawea 30cm2022-02-282542 次点击1 人感谢
# 前言
(出圈警告)
这是曾经(10年前)在电子圈的某个分圈里火过一把的VFD显示器(型号GP1211AI,电子垃圾的拆机件),让大家用不到百元的价格就尝到了上千元的128*64分辨率真空荧光显示技术。

这款VFD可以类比为行和列都用74HC595驱动的LED点阵,需要以特定的时序不断高速扫描(停了就会烧坏荧光粉)。
之前我也尝试用STM32去驱动它,即使用上SPI+DMA+定时器比较输出,仍需要耗费一些CPU时间来处理中断。只能做一些定制的内容(如时钟、天气、tty终端),而无法做成通用的显示模块。

最近,偶然发现了树莓派Pico,它的硬件设计思想与传统MCU迥异。细细一研究,发现特别适合用作VFD驱动,故有了这篇文章。
# 制作VFD显示屏
## 硬件
主要参考了官方的[硬件设计指导](https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf),加上亿点点外围元件。
打板、焊接过程略过,最终完成版如下
[![e57f2bf3df715136883bbb03a99f3e53.jpg](https://ppmm.org/images/2022/02/28/e57f2bf3df715136883bbb03a99f3e53.jpg)](https://ppmm.org/image/mG3R "元件面")
[![7df5e527ed14fc89990469069f35ba31.jpg](https://ppmm.org/images/2022/02/28/7df5e527ed14fc89990469069f35ba31.jpg)](https://ppmm.org/image/mDni "RP2040特写")
## 软件
主要分为以下几个模块
1. 扫描时序
使用PIO实现串行数据输出时序,数据从FIFO拉取。
2. 显存
开辟一片内存区为显存,用DMA给PIO喂数据。
Pico的DMA有独特的chain-to功能,可在通道1完成传输后,触发通道2传输,自动重新配置通道1的起始地址并重启传输。这样就能在完全没有CPU干预的情况下实现全自动扫屏。
3. LCD、OLED协议模拟
用PIO实现4线SPI从机接口,收到的数据推入FIFO,由DMA取入内存,供CPU解码并绘制显存。
目前实现了SSD1306、ST7565两款主控的SPI接口协议。之后再慢慢添加并口的液晶接口。
# 山寨小方屏
[小方屏](https://shumeipai.nxez.com/2021/05/13/diy-nxez-cube-dashboard-for-raspberry-pi.html)所用的1.3寸OLED的主控为SH1106,接口为I2C。
用Pico的I2C外设实现I2C从机,收到的数据推入FIFO由CPU在主循环内读出、解码、绘制显存。
屏测试无误后,把完整版固件刷入ESP8266,接好线,再根据教程配置好主机,就能用了。
[![a8b75eb22a15a327b6dc1afe8cfda901.jpg](https://ppmm.org/images/2022/02/28/a8b75eb22a15a327b6dc1afe8cfda901.jpg)](https://ppmm.org/image/muLZ)
[![05ff2b9df4f0f5a14da255635096f4f6.jpg](https://ppmm.org/images/2022/02/28/05ff2b9df4f0f5a14da255635096f4f6.jpg)](https://ppmm.org/image/mluI)

VFD比OLED更大、更亮。缩短快门时间拍一张
[![cd3133017341b83e979ee3e9b55c3112.jpg](https://ppmm.org/images/2022/02/28/cd3133017341b83e979ee3e9b55c3112.jpg)](https://ppmm.org/image/m7Zc)

# 后记
白嫖了[树莓派实验室](https://shumeipai.nxez.com/)的小方屏,感到十分抱歉。在这里把Pico的使用成果发出来,如果能激起一些讨论,也算是为树莓派社区贡献过了,就算是还愿吧(自我安慰……)。
收藏 ♥ 感谢
Spoony 小组长 2022-03-03 
多谢大佬分享。
这个VFD屏幕做显示很有味道。
店长大人 8.5m 2022-03-03 
请收下我的膝盖。这板子做的,简直是神级。
店长大人 8.5m 2022-03-03 
请问楼主,固件的编译方式是用官方sdk来编译的么?楼主这颗晶振,是哪个型号?负载电容和外接电容大概是多少?
店长大人 8.5m 2022-03-03 
我可能遇到了晶振上电频率不稳定的情况,有点烦躁。板子太小了以后,干扰太多,还不容易测试。
reiyawea 30cm 2022-03-04  ♥ 1
@店长大人 是用官方SDK编译的,但不是在linux环境下。请看这贴https://aijishu.com/a/1060000000236866
晶振是这个https://item.szlcsc.com/9522.html
谐振电容是30pF。我照抄了Pico的电路,在XOUT串1K电阻。
店长大人 8.5m 2022-03-10 
@reiyawea 楼主,你用的3525封装的晶振,起振时间应该小于1Ms,非常给力。但我用了个更小的封装,1ms内振不起来,MMD
reiyawea 30cm 2022-03-10  ♥ 1
@店长大人 我测过从上电到开始执行main需要150ms,估计是在填充XIP缓存,所以其实差不了那几ms起振时间
water123 50cm 2023-01-11  ♥ 1
楼主牛,弄过13位x7段 字符型的VFD,芯片好像是SPI口的,就是没点阵的通用。接了个USB-TTL在上面,可连电脑。


登录注册 后可回复。




› 相关内容关注微信公众号