在树莓派上使用Python驱动基于PT6312的VFD
VFD 简介
VFD 全称 vacuum fluorescent display(真空荧光显示器),是一种玻璃制的显示设备,通常应用在 DVD 和汽车仪表板上。具体的工作原理就是在一个玻璃围成的真空区域里,放置类似电子管的装置,让阴极射出的电子在栅极吸引下加速冲击阳极上的荧光粉,从而显示内容。
如果你用过老式 DVD,那么大概率见过这种显示器。就显示效果来说,与 OLED 一样是自发光,可视角度很广;并且因为属于较厚的玻璃制品,有种很独特的散射效果。
VFD 通常有数字型(7段 / 15段)和点阵型,以及一些定制产品(例如音响产品上专用于显示频谱)。这里我使用的是15段(米字)数字型,一共可显示7位数字,并有两个额外位置用于显示冒号。闲鱼上的 mangolu0215 在出售这款 VFD。
PT6312
VFD 本身只是一个显示设备,要驱动是相对比较复杂的。除了需要(相对于计算设备来说的)高压,还需要相关的控制器。对数字型 VFD 来说 PT6312 可能是比较常用的驱动芯片。点此可以查看数据手册。
这次使用的是成品模块(如图),板上已经集成了变压器和控制芯片,外部只需要输入低压,与控制器直接通信,就可以控制屏幕了。模块本身有两种规格,一种使用3.3V输入,另一种使用5V输入,使用时注意区分。
PT6312 使用三线串口来操作数据。在一些库(例如mbed)中,我有见过使用 SPI 来控制的相关代码。但我尝试用 Python 来实现都以失败告终。最终是参考卖家给出的51单片机的 C语言代码,直接操作线路上的电平来实现的。
Python 库
基于卖家给出的 C语言代码,翻译成了一个 Python 包,点此查看源代码。这里介绍一下如何使用。
硬件连接
前文给出了模块背面的照片,在左侧接口的下方印有各引脚的定义,从上往下依次是:
- Vcc 电源输入
- GND 地线
- HV_on 这个引脚不连接到控制芯片,而是控制模块上变压器的开关,高电平时变压器才打开。只有变压器打开,屏幕才通电。(注意:即使屏幕不通电,也可以向控制芯片发送数据,这两者是不冲突的)
- Dout 数据出口。这个引脚无需接入
- Din 数据入口
- Clk 时钟信号
- Stb 频闪线
Din + Clk + Stb 三个引脚用于向 PT6312 发送指令。如果不需要单独控制屏幕,HV_on 直接连接3.3V就可以使屏幕一直通电。
接下来在树莓派上随便找4个空余的 GPIO 引脚。参考这里来找到各个 GPIO 引脚的编号,注意使用 BCM 编号,而不是物理编号。例如下图中我选择了外侧物理编号为 22 ~ 28 的四个连续的引脚,这里四个引脚的 BCM 编号就分别是 25, 8, 7, 1。
接下来用合适的方式将模块连接上这些引脚,记得也接上电源输入和地线。注意:模块本身的接口座是2.0mm间距的 7pin JST 接口,常用的方口杜邦线是 2.54mm 间距,直接插的话空间不够,需要在外部转接。
软件环境准备
需要 Python 3环境。
可以先用你偏好的方式(venv / conda)来创建虚拟 Python 环境。完成后,直接使用 pip install pt6312
来安装驱动库即可。
点亮
库主要提供了一个 VFD
类。使用 python3
进入交互式命令行。
|
|
运行效果如图。受屏幕设计限制,米字中间那一点是点不亮的。
时钟例子
源代码中包含一个简单的时钟例子:
|
|
VFD.update(s)
一次可以显示7个字符。但屏幕上有额外的两个冒号,因此当第3、6个字符是冒号时是不占用字数的。以下是运行时钟的效果图。
VFD
除了 .update(s)
,还提供以下方法:
.on()
屏幕通电.off()
屏幕断电。注意:这只是断开屏幕的电源(拉低 HV_on),不会清空芯片数据。.delay(n)
停顿 n 毫秒,用于一些延时操作。.set_brightness(n)
设置亮度等级,亮度区间是[0, 7]
,默认亮度是 3。