西蒙说没有微控制器

电器工程 引领 数字逻辑 集成电路 计时器 555
2022-01-13 14:13:15

我想创建 Simon Says 的经典游戏,只使用逻辑电路、LED 和 IC,没有像 Arduino 这样的微控制器。

我想为这个电路使用 4 个 LED 和 4 个触觉开关。

我这样做是为了对自己进行教育,我不是在学习电子学,而是在学习计算机科学。

我知道我需要几个组件,包括十进制计数器和 555 计时器。

但是我的问题是,我如何才能决定以随机顺序显示哪些 LED?我知道我可以十年计数器/触发器将序列存储在内存中。

1个回答

通常,要在硬件中生成“随机”数字(出于娱乐级目的),您可以执行一些操作,例如采用某种不可预测的机制并将其与可预测但不明显的机制结合起来。

例如,如果您有一个快速运行的计数器,并在用户按下按钮时(例如在播放前一个序列时)对输出进行采样,这将有些随机,因为它们可能需要不同的时间。但是通过快速按下按钮来玩系统的人可能会一遍又一遍地获得相同的几个值(尽管如果时钟在 MHz 范围内,这可能不是一个现实的问题)。

相反,您可以使用线性反馈移位寄存器(Wikipedia),它将当前状态的组合函数将移位寄存器反馈回其输入,以生成人类不易察觉的序列,即使它的输出对于相同的输入实际上将是完全可以预测的。单独使用,这也不是一个好主意,因为它会在每次玩游戏时给出相同的序列,并且很快就会被重复用户记住。

但是,如果您结合使用两种方法,例如使用定时器获取不可预知的起始值,然后使用线性反馈移位寄存器将其混合(或者可能让 LFSR 针对快速时钟自由运行,并根据用户交互)您应该能够为娱乐游戏获得足够随机的东西。

您可以尝试的另一个来源是模数转换器的低位。

无论您做什么,您都可能希望在构建电路之前对其进行仿真(以及您的整个系统设计)。该项目足够复杂,使用小型 FPGA 或更大的 CPLD 可能是值得的。

最后请记住,从历史上看,最初的西蒙游戏显然使用了早期的微处理器 TMS1000。一般来说,复杂的顺序操作可以更有效地实现,状态机只选择简单的问题,必须运行得非常快,或者是学习替代最终解决这些问题的工作。

编辑:

http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game

包含一些有趣的观察结果,包括从 TMS1000 到可能是自定义标记版本的最终变化。与您的问题更相关的是,它表明原始版本通过在用户按下按钮时对自由运行的计数器进行采样来生成其随机数;-)