DIY一个基于IV-21的VFD管的数字时钟方案

2019年09月29日 作者:Teardown

我已经将这可爱的iv-21 8位数vfd管用一段时间,非常炫酷,所以我认为在它们周围设计一个小型台式时钟会很有趣。

本文我会主要介绍下这个项目的一些工作原理。包括软件硬件。该软件正在进行一些主要任务,所有这些任务必须同时运行。首先,atmega328P必须为电子管产生更高的电压,并使用运行在〜62.5kHz的timer1来执行此操作(将占空比从50-95%调整将分别将开路电压从〜30-120V提升)。幸运的是,负载(vfd管)在运行期间不会真正发生很大变化,因此我只运行了升压转换器开环,尽管通过向中断中添加一些代码来关闭环路非常简单。

另外,我们需要一种自动将多路复用更新为所有数字的方法。这是在配置为以2kHz触发的timer2中断中完成的。在此中断中,我们做了几件事。首先,类似于我的单词和离散的8位LED时钟,该中断将在每次迭代中逐步经过一位,并设置要发送的正确段。数据通过SPI外设串行发送,因此我们不必浪费时间手动敲打引脚来发送所需的20位以更新下一位。实际上奇怪的是,由于MCU一次只处理8位spi数据包,我们最终不得不发送3个字节(24位),而前4位最终被丢弃。

因此,现在我们有高压和数据流向电子管驱动器。我们剩下要做的就是读取按钮输入,与实时时钟对话,并在按下按钮时发出哔哔声/哔声。我最初想使用timer0生成可调节频率的蜂鸣声,但发现那是arduino库用来生成延迟的原因,弄乱它会有些烦人。因此,相反,我只是寻找一个可以设置任何功能来控制蜂鸣器的蜂鸣器标志,如果设置了该标志,则在中断中它将切换蜂鸣器引脚。由于它只能在每个中断周期内切换一次,因此频率最终是中断频率的一半,即1kHz(一个适当的声音,但对于哔哔声而言却不太讨厌)。

实时时钟也可以通过SPI控制,但是我对此有点懒,只是包含了我之前编写的用于信号发信号的库文件(我当然可以与max6921驱动器芯片共享数据和时钟。并给rtc一个单独的芯片选择)。我们有很多免费的大头针,所以为什么不呢。

对于按钮引脚,我想到了一个单独的引脚更改中断来读取它们,但我只是简单地重用定时器中断以2kHz的频率轮询按钮并设置全局标志,任何其他功能都可以使用该标志来响应按钮按下。此外,在按下蜂鸣器代码期间,还会在中断中的蜂鸣器代码中读取按钮标志,以便在按下任何按钮以获得用户反馈时发出蜂鸣声。

因此,这就是软件方面的所有内容。我发现了一个主要错误,那里似乎总是设置了数字0的段A,并且已经在中断中将其跟踪到显示多路复用器代码,因此,一旦有时间,我将对其进行修复。

奇怪的是,仅将SPI数据包的第一个字节设置为数字0(此处为0xFF,但应为0x00)。无论如何,一旦我解决了这个错误,我便会将所有设计文件上传到项目页面。

硬件

该项目的硬件要求非常简单:两个按钮用于设置时间,一个小的扬声器用于发出哔哔声,并可能在将来增加警报功能,板载软件可控制的“高压”升压转换器可从5V产生约30-70V, USB微功率输入,电池支持的实时时钟以及软件可控的直流灯丝驱动器/驱动器消隐。过去,我使用较大的IV-18管做过相同的时钟,而PCB是通过手工布线在原型板上完成的,但这一次我想要的是看起来更专业的东西。

该设计包括两个板。第一个是包含所有电子设备的主板,以保持时间,生成必要的电子管驱动电压并控制显示屏的所有多路复用段。我想将电路板保持小巧,单面以便于组装,同时又不要对微观的表面贴装元件感到迷惑。数字器件大部分用于表面安装,但升压转换器组件是通孔的,并且间距适当,以便于更换或寻找合适的替代品。所有低压物品都凝结在左侧,而高压物品则在右侧,而集管则在末端。我选择只做直流灯丝驱动,因为我过去对直流造成的亮度梯度的经验不是 与转移到交流驱动器会增加的复杂性相比,这是很糟糕的(尤其是对于像这样的小管子)。这是我确定的电路和布局:

 

1 2

相关文章

tracer