Simon diz sem microcontrolador

8

Eu gostaria de criar o clássico jogo de Simon Says, utilizando apenas circuitos lógicos, LEDs e CIs, nenhum microcontrolador como o Arduino.

Eu gostaria de usar 4 LEDs e 4 interruptores táteis para este circuito.

Estou fazendo isso como um exercício educacional para mim, não estou estudando eletrônica, mas estou estudando Ciência da Computação.

Entendo que precisarei de vários componentes, incluindo contadores de décadas e 555 temporizadores.

No entanto, minha pergunta é: como posso decidir quais LEDs exibir em uma sequência aleatória? Entendo que posso usar contadores de décadas / chinelos para armazenar a sequência na memória.

Jacob Clark
fonte

Respostas:

5

Geralmente para gerar números "aleatórios" no hardware (para fins de diversão), você pode fazer algo como pegar um mecanismo que é um tanto imprevisível e combiná-lo com um mecanismo que é previsível, mas não óbvio.

Por exemplo, se você tiver um contador executando rapidamente e faça uma amostra da saída sempre que o usuário pressionar um botão (como durante a reprodução da sequência anterior) que será um tanto aleatória, pois eles podem levar períodos variáveis. Mas alguém que joga no sistema pressionando botões muito rapidamente pode ter os mesmos valores repetidamente (embora o relógio esteja na faixa de MHz, isso pode não ser uma preocupação realista).

Por outro lado, você pode usar um Linear Feedback Shift Register (Wikipedia) que alimenta uma função combinatória do estado atual e um shift shift de volta à sua entrada, para gerar uma sequência que não é prontamente óbvia para os seres humanos, mesmo que sua saída para as mesmas entradas será realmente totalmente previsível. Usado por si só, isso também não seria uma boa idéia, pois daria as mesmas seqüências a cada jogo do jogo e seria rapidamente memorizado por um usuário repetido.

Mas, se você combinar dois métodos, como usar o timer para obter um valor inicial imprevisível e usar o registro de troca de feedback linear para misturá-lo (ou talvez deixar o LFSR correr livremente contra um relógio rápido e fazer a amostragem com base em interação do usuário), você deve conseguir algo aleatório o suficiente para um jogo de diversão.

Outra fonte que você poderia tentar seria os bits de baixa ordem de um conversor de analógico para digital.

O que quer que você faça, provavelmente desejará simulá-lo (e também o design geral do sistema) antes de construir o circuito. O projeto é suficientemente complexo para que valha a pena usar um FPGA pequeno ou um CPLD maior.

E, finalmente, lembre-se de que, historicamente, o jogo original de Simon aparentemente usava um microprocessador antigo, o TMS1000. Operações seqüenciais geralmente complexas podem ser implementadas de maneira mais eficiente dessa maneira, com máquinas de estado escolhidas apenas para problemas simples, que devem ser executados com extrema rapidez ou estão aprendendo substitutos para eventuais trabalhos sobre esses problemas.

Editar:

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

Contém algumas observações interessantes, incluindo uma eventual alteração do TMS1000 para o que pode ser uma versão com rótulo personalizado. Mais relevante para sua pergunta, ele sugere que o original gerou seus números aleatórios amostrando um contador de corrida livre quando o usuário pressionou um botão ;-)

Chris Stratton
fonte
Gostaria de saber quantos chips, ou quão complexo um CPLD seria necessário para construir um "processador" capaz de lidar com um jogo semelhante à unidade da marca Simon usando um "programa" armazenado em uma ROM? Meu palpite seria que isso poderia ser feito com menos de uma dúzia de chips discretos disponíveis no mercado e uma ROM 32Kx8 ou menor; quanto mais chips, menor a ROM necessária. Se não fosse necessário o "jogo 2", um registro de troca de feedback baseado em software poderia lidar com qualquer tamanho de "sequência" com 40 bits ou mais de armazenamento (ao escolher uma sequência de cores, execute um LFSR de 20 bits até que um botão seja pressionado , então copie-o ... #
2133
... para um registro de backup. Em seguida, reproduza a sequência gerada por esse LFSR, copie o registro de backup novamente para o LFSR e aguarde o usuário pressionar os botões nessa sequência.
Supercat 21/13