可以这么说,在本文中,我想谈谈我的第一个电气工程项目。 我必须说,就我的职业而言,我距离电路和无线电电子设备还很远,但是对该主题的兴趣并没有使我从小就休息。 对于有经验的人,下面的信息似乎太明显了,我所做的很多事情都是“发明自行车”。 但是也许像我这样的菜鸟可以发现一些新颖有趣的东西。 谁在乎,请在猫下。
一切始于为我的小女儿制作开发板的想法。 首先,我想伸胳膊做自己的事情。 其次,我想张开我的大脑,想出一些普通类型的主板所没有的东西。
在观察了孩子在日常生活中最喜欢做的事情之后,他们决定除了标准的链柄设计外,还需要添加用于按压的按钮和显示对按压反应的特定设备。 由于应该显示一些简单但明亮的内容,因此选择的是红色的8x8 LED矩阵。
在创建玩具之前,我已经在Arduino Uno架子上收集了一段时间的灰尘-它一直等到我能想到有用的东西之外,除了自动浇水系统之外,它除了音高本身外,还比我不需要的少一点。 我以为她(Arduino)的时机已经到了,因为您需要从某个地方开始。 阅读矩阵的手册后,我发现除了不将其连接到Arduino(仅因为它需要我的Arduino中没有的16个引脚)之外,不可能同时控制所有LED。 您可以同时在一行或一列中使用某些二极管发光(控制公共阴极或公共阳极)。 而且,如果您足够一致且迅速地执行此操作,则一个人会停止察觉眨眼并看到稳定的画面。 我还了解到,对于Arduino来说,有现成的驱动程序和库需要承担管理该过程的麻烦。 当时没有这种驱动程序的事实预示了整个项目的结果。
当我拖延一切,推迟选择最佳地点购买驱动程序时,我遇到了有关触发系统操作的文章。 对于我的大脑来说,人文科学已经成为一个真正的发现,它使人们了解了记忆是如何在原始水平上组织的。 然后我想知道如果没有Arduino我是否可以基于触发器和逻辑电路来进行项目开发。
因此,首先您必须决定要显示什么以及如何做。 显然,有必要将信号依次施加到矩阵的八行,并且对于每次迭代,必须将并行信号施加到某些列。 好吧,这使我了解了三个主要组成部分:一个脉冲发生器,一个将时钟转换成八个连续信号的时钟转换器,以及一个针对八个信号中的每个信号将输出一定并行信号组合的转换器。 没那么复杂。
经过一番思考,我脑中形成了一个电路,其中使用三个串联的JK触发器将时钟信号转换为二进制代码,然后使用逻辑电路将其转换为八进制。 有关此类触发器的详细信息至少可以在Wikipedia上阅读。 简而言之,它具有两个输入(J和K)和两个输出(Q和Q̄),以及一个同步输入(CLK)。 在下一个同步脉冲期间将逻辑单元馈入一个输入时,只要第二个输入保持为零,无论是否再次施加同步脉冲以及所选输入上的值是否发生变化,该单元都会显示在相应的输出上并存储在其上。 如果将一个单位提交给第二个输入,并将其提交给第一个零,那么在下一个同步脉冲时,第一个输出的值将更改为零,第二个将更改为一个。 但是,如果将一个单元同时应用于两个触发输入,则在每个同步脉冲的作用下,该单元将交替出现在其中一个输出上。 如果您使用两个触发器,则将时钟脉冲施加到第一个的同步输入,然后将信号从第一个的输出Q1施加到第二个的同步输入,结果,输出Q1每两个周期输出一个,Q2每四个周期输出一个。 因此,获得了两位二进制计数器。 如果您以相同的方式添加第三个触发器,那么由于有了第三个数字,您可以用二进制代码最多计数八个-这就是您所需要的。

接下来,有必要创建一个真值表并选择一组逻辑键,以使二进制代码变成八个连续的信号。 如果对于某些情况而言,真值表和布尔运算是未知的,那么您可以在Wikipedia上和此处再次阅读它们。
似乎已经完成了一半的工作,但实际上并不是那么简单。 当我将电路的第一部分放在面包板上进行测试并想象如何以类似的方式实现第二部分时,我的幻想吸引了许多个月(也许是数年-从事业余爱好的时间是下班后一个多小时的时间)来绘制图表和编写真值表。 实际上,对于每个图片的八行,您需要生成唯一的列组合。 而且,图片越多,电路将变得越发可怕。 我意识到仅凭逻辑键就无法完成预期的工作。 有必要寻找可以简化此过程的方法。
解决方案是存储芯片。 对于我的任务,EEPROM(电可擦可编程只读存储器)非常适合-可编程存储器,可通过并行输入/输出进行电擦除。 该存储器具有多少个地址输入,实际上是存储器单元的二进制地址的位。 也就是说,如果存储器具有n个地址输入,则可以编程2 ^ n个单元。 存储器引脚的数量是所谓的“字长”,即可以写入每个单元的二进制字符串的实际长度。 每个字长的单元数的乘积决定了以位为单位的存储量。
在JK触发器的输出端,我可以使用二进制代码形式的输入信号。 它仍然需要用按钮中的位来补充它,该位应负责输出不同的图片,并且要点在帽子上。
再者,由于缺乏经验,我无法充分评估该过程的复杂性。 毕竟,需要对内存进行编程,为此,您需要一个程序员-该设备要一次性购买玩具就非常昂贵。 Googling显示,从理论上讲,使用Arduino可以做到这一点。 但是对于编程,有必要同时向存储芯片的地址输入和输出同时提供信号,随后应再现信号。 而且我们还需要芯片控制信号。 也就是说,比可用引脚还要多。 额外的谷歌搜索功能为我打开了一个移位寄存器-一种可以记住给定的零和一序列并将其显示在并行输出上的芯片。 通常,此类芯片还充当缓冲器,并具有可以顺序再现输入信号的输出。 也就是说,如果将下一个相同的寄存器连接到该寄存器,则可以同时显示一个序列的两倍大的序列。 当您进入该行时,第一部分将通过第一个寄存器,而第二部分将通过缓冲区,其余部分将保留在第一个寄存器中。 通过添加第三个寄存器,您可以将字符串的长度增加三倍,等等。 为此,您必须使用一种不熟悉的编程语言编写草图。 但是经过一系列的反复试验,在Python上有一些经验,在Internet上有许多示例,事实证明该任务是相当可行的。 可以在github上绘制草图。
现在编写草图,连接微电路,启动,……什么都没有-存储器未编程。 几个样本,更改记录设置,没有结果。 我有一个微电路W27C512-45Z。 仔细阅读手册显示了不愉快的时刻。 要写入微电路的特定触点,必须提供电压为12V的0.03A电流。 我以为我只是买了一个不太合适的芯片。 但是,在滚动浏览电气元件本地商店的货架后,我确保每个人都需要12V。 我没有实验室电源。 房屋中有很多12V块,但它们都是脉冲的,而且电流约为1A。 原谅我,经验丰富的工程师对这种牺牲品的理解,但无奈之下,我决定尝试看看眼前的那些方块是否会发生奇迹。 没发生。 记录的前两次通过没有产生任何结果,而在第三个微电路之后,它不再显示出生命迹象。
在Internet上,我发现有一些ST662AB微电路(5V-12V转换器)的参考,当与正确的一组电容器组装在一起时,该电路应提供必要的电流和电压。 实际上,找到芯片并不容易。 结果,我从中国订购了SMD。 那四到六周的交货时间呢? 是的,学习。 翻阅有关存储器编程的文章,我提到了可以在5V电压下编程的芯片。 关于AT28C256。 实际上,在给她的数据表中没有提到12V。 需要带! 没错,满足我需要的芯片有点多余,因为它可以让我节省256Kb:一个用于32K地址的8位输出,考虑到行同步信号占用的三个地址引脚,它可以编码多达4096个图像(对我来说10个就足够了)。 另外,交货必须已经从英国完成。 但是我没有找到其他选择,最后可以对内存进行重新编程,并且当玩具不再重要时,可以在其他地方使用该芯片。 所以四天后,我有了记忆。 素描测试运行和幸福-一切正常。
剩下的最后一件事是确定会有多少个按钮,绘制8x8图片,并实现从按钮到电路的信号加法。 在估计了板上的位置之后,我选择了五个按钮。 考虑到与内存资源相比毫无价值的需求,最简单的方法是将每个按钮的信号直接发送到单独的输入,而无需使用任何编码。 没错,我仍然必须解决在图片之间切换的问题。 可以使用固定压力的按钮。 但是这样的实现方式不适合一岁大的孩子使用,因为那样的话,在按下下一个按钮之前,有必要先按下工作的按钮,这本身就是很原始的。 我想提出一种不固定按钮的方案,该方案将保存每个按钮的按动,甚至取消对前一个按钮的按动。 我了解了使用不同类型的触发器的功能,希望其中一些可以自行解决此问题,但可惜。 用纸和铅笔坐了一会儿之后,我想到了下图(三个按钮的示例)。
首先,您需要将所有按钮连接到某个收集器,当您单击任何按钮时,输出将提供一个单位。 为此,OR键是合适的。 由于大多数按键微电路只有两个输入,因此必须将前两个按钮连接到一个按键,然后将其输出连接到第二个按键的第一个输入,然后将第三个按钮连接到第二个输入。 这样,您可以继续连接更多按钮,并为随后的每个按钮添加一个新密钥。 此外,每个按钮必须连接到单独的XOR键和单独的JK触发器的J输入。 将“或”缓冲区的输出连接到XOR键的第二个输入,并将每个XOR键的输出连接到相应的JK触发器的K输入。 因此,通过按下例如按钮1,一个单元将被发送到J1,而XOR1将不会被触发,因为一个单元既从按钮又从OR缓冲器提供给它。 在输出Q1处,还将出现并保存一个单位。 同时,XOR2和XOR3将工作,将一个单元馈送到K2和K3。 如果在第2季度或第3季度之前有一个单位,它将更改为零。

拿出8x8图片也是一项单独的测试。 要复制可识别图像的点太少。 但是打开幻想,仍然设法画了一些,例如一个机器人。

对于图片,我创建了真值表。 但是由于需要为矩阵的行提交一个,而为列提交零,因此必须反转表。 我用十六进制编码写下了生成的二进制代码,以便在Arduino草图中更方便地使用。
要构建整个电路,我想订购一块成品板。 但是从提供模拟板制造服务的可用公司列表中,我可以得到将近25美元的双边板最便宜的选择。 我不知道,也许这是正常费用,但对我来说似乎有点多了。 另外,我绝对没有设计版面的经验。 而且我发现焊接过程非常愉快且舒缓。 因此,我购买了通用板,一卷多色电线,必要的组件,并在组装中坐了几个晚上。 由于所有组件均采用5V至12V的电压工作。 为了方便起见,我制作了9V电池。
一切如何工作,可以在这里看到,完整的方案可以在github上找到 。
作为整个电路的“心脏”,我使用了脉冲发生器。 我不确定时钟脉冲的确切频率是多少,因此我使用了经过调整的现成电路。 不幸的是,我没有示波器,但是通过比较调整和电路数据表,使用了大约1KHz的频率。 在这里, 视频显示了频率如何从低到高变化,您可以看到如何绘制矩阵行。
谢谢您的关注。