Simon dice senza microcontrollore


8

Vorrei creare il classico gioco di Simon Says utilizzando nient'altro che circuiti logici, LED e circuiti integrati, nessun microcontrollore come Arduino.

Vorrei utilizzare 4 LED e 4 interruttori tattili per questo circuito.

Lo sto facendo come un esercizio educativo per me stesso, non sto studiando elettronica ma sto studiando Informatica.

Comprendo che avrò bisogno di diversi componenti tra cui contatori di decadi e 555 timer.

Tuttavia, la mia domanda è: come posso decidere quali LED visualizzare in una sequenza casuale? Capisco di poter decennio contatori / Flip Flop per memorizzare la sequenza in memoria.

Risposte:


5

Generalmente per generare numeri "casuali" nell'hardware (per scopi di divertimento), puoi fare qualcosa come prendere un meccanismo che è in qualche modo imprevedibile e combinarlo con un meccanismo prevedibile, ma non ovvio.

Ad esempio, se si dispone di un contatore in esecuzione rapidamente e campionare l'output ogni volta che l'utente preme un pulsante (ad esempio durante la riproduzione della sequenza precedente) che sarà in qualche modo casuale, poiché potrebbero richiedere tempi variabili. Ma qualcuno che gioca al sistema premendo i pulsanti molto rapidamente potrebbe tendere a ottenere gli stessi pochi valori più e più volte (anche se se l'orologio si trova nella gamma MHz che potrebbe non essere una preoccupazione realistica).

Al contrario, è possibile utilizzare un registro a scorrimento lineare (Wikipedia) che alimenta una funzione combinatoria dello stato corrente un registro a scorrimento nel suo input, per generare una sequenza che non è immediatamente ovvia per gli umani, anche se il suo output per gli stessi input sarà in realtà del tutto prevedibile. Utilizzato da solo, questa non sarebbe una buona idea in quanto darebbe le stesse sequenze ad ogni gioco e sarebbe così rapidamente memorizzata da un utente ripetuto.

Ma se si combinano due metodi, come usare il timer per ottenere un valore iniziale imprevedibile, e quindi usare il registro a scorrimento del feedback lineare per mescolarlo (o forse lasciare che l'LFSR funzioni liberamente contro un orologio veloce e campionarlo in base a interazione con l'utente) dovresti riuscire a ottenere qualcosa di abbastanza casuale per un gioco di divertimento.

Un'altra fonte che potresti provare sarebbero i bit di ordine basso di un convertitore analogico-digitale.

Qualunque cosa tu faccia, probabilmente vorrai simularlo (e anche la tua progettazione generale del sistema) prima di costruire il circuito. Il progetto è abbastanza complesso che vale la pena usare un piccolo FPGA o un CPLD più grande.

E infine tieni presente che storicamente, il gioco originale Simon apparentemente utilizzava un microprocessore, il TMS1000. In questo modo, operazioni sequenziali generalmente complesse possono essere implementate in modo più efficiente in questo modo, con macchine a stati scelte solo per problemi semplici, che devono funzionare in modo estremamente rapido o che stanno imparando sostituti per eventuali lavori su tali problemi.

Modificare:

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

Contiene alcune osservazioni interessanti, tra cui un'eventuale modifica dal TMS1000 a quella che potrebbe essere una versione con etichetta personalizzata. Più pertinente alla tua domanda, suggerisce che l'originale ha generato i suoi numeri casuali campionando un contatore a corsa libera quando l'utente ha premuto un pulsante ;-)


Mi chiedo quanti chip, o quanto sia complesso un CPLD, sarebbero necessari per costruire un "processore" in grado di gestire un gioco simile all'unità del marchio Simon usando un "programma" memorizzato in una ROM? La mia ipotesi sarebbe che si potesse fare con meno di una dozzina di chip discreti disponibili e una ROM 32Kx8 o inferiore; più chip, più piccola sarebbe la ROM che sarebbe richiesta. Se uno non aveva bisogno di "gioco 2", un registro a scorrimento feedback basato su software poteva gestire qualsiasi lunghezza di "sequenza" con circa 40 bit di memoria (quando si seleziona una sequenza di colori, eseguire un LFSR a 20 bit fino a quando non viene premuto un pulsante , poi copialo ...
supercat,

... in un registro di backup. Quindi riprodurre la sequenza generata da quell'LFSR, copiare nuovamente il registro di backup nell'LFSR e attendere che l'utente prema i pulsanti in quella sequenza.
supercat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.