西蒙说没有微控制器


8

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

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

我这样做是为了给自己做一个教育性练习,不是在学习电子学,而是在学习计算机科学。

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

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

Answers:


5

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

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

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

但是,如果您将两种方法结合使用,例如使用计时器获取无法预测的起始值,然后使用线性反馈移位寄存器对其进行混合(或者也许让LFSR在快速时钟下自由运行,然后根据用户交互),您应该能够获得足够的随机性来进行娱乐游戏。

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

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

最后要记住,从历史上看,最初的西蒙游戏显然使用了早期的微处理器TMS1000。通常,可以通过仅针对简单问题,必须运行得非常快或正在学习替代此类问题的最终方法的问题选择状态机,从而以这种方式更有效地实施复杂的顺序操作。

编辑:

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

包含一些有趣的发现,包括最终从TMS1000更改为可能是其自定义标签的版本。与您的问题更相关,它建议当用户按下按钮时,原件通过对自由运行计数器进行采样来生成其随机数;-)


我不知道要使用一个存储在ROM中的“程序”来构建一个能够处理类似于Simon品牌单位游戏的“处理器”,需要多少芯片或CPLD有多复杂?我的猜测是,它可以用不到十二个现成的分立芯片和32Kx8或更小的ROM来完成。芯片越多,所需的ROM就越小。如果不需要“游戏2”,则基于软件的反馈移位寄存器可以处理40位左右的任何长度的“序列”(选择颜色序列时,运行20位LFSR直到按下按钮) ,然后将其复制...
supercat

...到备用寄存器。然后播放该LFSR生成的序列,将备份寄存器复制回LFSR,然后等待用户按该序列按下按钮。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.