Simon Mengatakan tanpa Mikrokontroler


8

Saya ingin membuat game klasik Simon Says dengan memanfaatkan apa pun kecuali sirkuit logika, LED dan IC, tidak ada Microcontrollers seperti Arduino.

Saya ingin menggunakan 4 LED dan 4 Switch Taktil untuk sirkuit ini.

Saya melakukan ini sebagai latihan pendidikan untuk diri saya sendiri, saya tidak belajar elektronik tetapi saya belajar Ilmu Komputer.

Saya mengerti bahwa saya akan membutuhkan beberapa komponen termasuk penghitung dekade dan 555 penghitung waktu.

Namun pertanyaan saya adalah, bagaimana saya bisa memutuskan LED mana yang akan ditampilkan dalam urutan acak? Saya mengerti saya dapat dekade counter / Flip Flops untuk menyimpan urutan dalam memori.

Jawaban:


5

Umumnya untuk menghasilkan angka "acak-ish" dalam perangkat keras (untuk tujuan hiburan-kelas), Anda dapat melakukan sesuatu seperti mengambil mekanisme yang agak tidak dapat diprediksi dan menggabungkannya dengan mekanisme yang dapat diprediksi, tetapi tidak jelas.

Misalnya, jika Anda memiliki penghitung yang berjalan dengan cepat, dan sampel output setiap kali pengguna menekan tombol (seperti saat memutar ulang urutan sebelumnya) yang akan agak acak, karena mereka mungkin membutuhkan waktu yang bervariasi. Tetapi seseorang yang memainkan sistem dengan menekan tombol dengan sangat cepat mungkin cenderung mendapatkan beberapa nilai yang sama berulang-ulang (meskipun jika jam berada dalam kisaran MHz yang mungkin bukan masalah realistis).

Sebaliknya, Anda dapat menggunakan Linear Feedback Shift Register (Wikipedia) yang mengumpankan fungsi kombinatorial dari keadaan saat ini register geser kembali ke inputnya, untuk menghasilkan urutan yang tidak mudah jelas bagi manusia, meskipun output untuk input yang sama sebenarnya akan sepenuhnya dapat diprediksi. Digunakan dengan sendirinya, ini juga bukan ide yang baik karena akan memberikan urutan yang sama setiap permainan dan dengan cepat diingat oleh pengguna yang berulang.

Tetapi, jika Anda menggabungkan dua metode, seperti menggunakan timer untuk mendapatkan nilai awal yang tidak dapat diprediksi, dan kemudian menggunakan register shift umpan balik linier untuk mencampurnya (atau mungkin membiarkan LFSR berlari bebas melawan jam cepat, dan mengambil sampel berdasarkan interaksi pengguna) Anda harus bisa mendapatkan sesuatu yang cukup acak untuk permainan hiburan.

Sumber lain yang bisa Anda coba adalah bit orde rendah dari konverter analog-ke-digital.

Apa pun yang Anda lakukan, Anda mungkin ingin mensimulasikannya (dan keseluruhan desain sistem Anda juga) sebelum Anda membangun sirkuit. Proyek ini cukup kompleks sehingga menggunakan FPGA kecil atau CPLD yang lebih besar mungkin bermanfaat.

Dan akhirnya ingatlah bahwa secara historis, game asli Simon ternyata menggunakan mikroprosesor awal, TMS1000. Secara umum operasi berurutan yang kompleks dapat lebih efisien dilaksanakan dengan cara itu, dengan mesin negara dipilih hanya untuk masalah yang sederhana, harus berjalan sangat cepat, atau sedang belajar pengganti untuk pekerjaan akhirnya pada masalah seperti itu.

Edit:

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

Berisi beberapa pengamatan yang menarik, termasuk perubahan akhirnya dari TMS1000 menjadi versi yang mungkin berlabel ubahsuaian. Lebih relevan dengan pertanyaan Anda, ini menunjukkan bahwa dokumen asli menghasilkan angka acak dengan mengambil contoh penghitung gratis saat pengguna menekan tombol ;-)


Saya bertanya-tanya berapa banyak chip, atau seberapa kompleks sebuah CPLD, akan diperlukan untuk membangun "prosesor" yang dapat menangani permainan yang mirip dengan unit merek Simon menggunakan "program" yang disimpan dalam ROM? Dugaan saya adalah bahwa hal itu dapat dilakukan dengan kurang dari selusin chip terpisah dan ROM 32Kx8 atau lebih kecil; semakin banyak chip, semakin kecil ROM yang dibutuhkan. Jika seseorang tidak membutuhkan "game 2", register shift umpan balik berbasis perangkat lunak dapat menangani setiap "urutan" panjang dengan 40 atau lebih bit penyimpanan (ketika memilih urutan warna, jalankan LFSR 20 bit hingga tombol ditekan , lalu salin ...
supercat

... ke register cadangan. Kemudian mainkan urutan yang dihasilkan oleh LFSR itu, salin register cadangan kembali ke LFSR, dan tunggu pengguna menekan tombol dalam urutan itu.
supercat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.