最初,在我们获得了几乎取之不尽的优质苏联数码管 IN-12、IN-14 和 IN-18 之后,我们打算将这些数码管简单地展示为 Arduino 的 Shield。那时我们已经拥有 Arduino,因此情况仍然很小(当时我们是这么想的)。当时我们对如何处理这种灯一无所知。
很快,我们在互联网上找到了为此类电子管供电的方案:
是的!它闪耀!我们看到的事实让我们感到震惊,这就像一个小奇迹,我们意识到我们走在了正确的轨道上。立即开始拍照:
第二天,开始讨论未来项目的概念:为了简化和降低成本,决定使用动态显示原理的方案,但后来决定放弃它,转而支持完全的方案。静态显示模式。虽然对于 IN-14 数码管视觉差异并不明显,但对于 IN-18 灯管的差异是明显的——在动态模式下,它们的工作不那么亮,它们中的许多出现,所谓的蓝点效应:
动态显示模式是一种模式,在这种模式下,不是所有的灯管在每次都被点亮,并且只有一个(一次),也可以是同时点亮的其他种类,例如只有两个灯管。
在讨论该设备的未来时,一旦决定实现在来自计算机的灯管上显示信息的能力,它将允许爱好者创建自己的设备,这些设备将显示在灯上,例如,数量未读消息或游戏中的回合数,例如 Fallout。
然后开始选择可以在管中切换阴极(数字)的硬件。选择很明显——带有 SPI 的移位寄存器可以节省 MCU 引脚。但由于电源电压非常高 - 高达 200 伏,因此选择不多:HV513、HV5812、HV5122。当我们在这些芯片上构建设备时,我们停留在 HV5812(在新的 Shields 版本 NCS314 V2.X 和 NCS312 V1.X 中使用 IC HV5122)。这个芯片非常方便,因为它可以让你同时控制两个灯,作为一个 20 位寄存器。
要控制 6 根管子,我们需要将三个这样的威廉希尔官方网站 串联起来。这允许一次通过 SPI 发送数据包,而不关心更新管上的信息,就像动态显示算法的情况一样。也就是换句话说——只要我们不需要改变管子上的信息,MCU就可能忙于其他任务,甚至休眠!
我们想说说 SPI 上的数据传输。Arudino 一次可以传输,只有 8 位。我们需要 60,最接近的更高整数可以被 8 整除是 64,因此必须应用一点魔法 - 为每个寄存器形成一个 unsigned long long var64 位类型的大变量,并且每次传递 8 次 8 位将变量内的所有位向右移动:
SPI.transfer(var64);
SPI.transfer(var64>>48);
SPI.transfer(var64>>40);
SPI.transfer(var64>>32);
SPI.transfer(var64>>24);
SPI.transfer(var64>>16);
SPI.transfer(var64>>8);
SPI.transfer(iTmp);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !