Bagaimana cara menerapkan permainan Lights-Out menggunakan gerbang logika atau sandal jepit?

9

Pertama, bagi mereka yang tidak terbiasa dengan game, ini adalah cara kerjanya,

bermain game

Tujuan permainan ini adalah untuk mematikan semua lampu, karenanya dinamakan "Lights Out", dan setiap penekanan tombol / lampu berbelok ke negara bagiannya serta tetangga yang berdekatan utara / selatan / timur / barat, dan itu cukup banyak. .

Sekarang, apa yang bisa saya pikirkan adalah dengan menggunakan sandal jepit SR, atau sandal jepit JK. Ini karena kemampuannya untuk bertindak sebagai elemen penyimpanan (keadaan awal dan keadaan berikutnya). Tapi sepertinya saya tidak bisa memikirkan cara untuk benar-benar mengimplementasikannya.

Gagasan lain adalah bahwa setiap set tombol dan tombol / lampu yang berdekatan (NSEW) akan memiliki tabel kebenarannya sendiri, seperti ini:

tabel logika

tetapi, apakah mungkin untuk memiliki variabel input sama dengan variabel output? Apakah ada cara lain untuk melakukan ini?

Julienn
sumber

Jawaban:

9

Pendekatan yang jelas akan menggunakan prosesor dan melakukan semua ini di firmware.

Namun, jika saya benar-benar perlu melakukan ini dengan pisau batu dan kulit beruang untuk beberapa alasan, saya akan mendedikasikan flip-flop toggling untuk setiap kotak. Flip flop dari masing-masing kotak akan beralih dengan menekan tombolnya atau salah satu dari empat tombol yang berdekatan. Tentu saja tombol-tombol yang ditekan itu harus di-bouncing. Sekali lagi, ini akan lebih mudah di firmware.

Solusi perangkat keras tidak akan terlalu rumit, tetapi semuanya akan direplikasi 25 kali, menjadikannya besar dan membosankan untuk dibangun.

Ditambahkan:

Ternyata uraian di atas tidak cukup jelas. Berikut adalah diagram dari apa yang ada di setiap sel:

4 input lainnya ke gerbang NAND didorong dari sinyal yang dilepaskan dari 4 tombol di sekitarnya yang juga diharapkan untuk mengubah keadaan kotak ini. Demikian juga, sinyal yang dilepaskan dari tombol ini juga menuju ke salah satu input gerbang NAND dari masing-masing 4 sel di sekitarnya.

Olin Lathrop
sumber
1
Ini sepertinya hal yang paling layak untuk dilakukan. Saya akan menggunakan TFF dan mengikat semua input T ke "1.". Kemudian saya akan memiliki saklar sesaat SPDT untuk setiap tombol. Ikat satu lemparan ke "0," satu lemparan ke "1," dan kemudian kutub ke input jam TFF yang sesuai. Kemudian, ketika Anda menekan tombol, itu akan beralih flip-flop di sekitarnya dengan menghasilkan satu pos / neg edge.
Shamtam
1
@Shamtam: Ya, itu salah satu cara untuk melongo jika Anda memiliki sakelar SPDT. Namun sebagian besar tombol hanya biasanya membuka SPST.
Olin Lathrop
Saya kira saya harus menggunakan saklar SPDT untuk debouncing, baik tombol tekan atau tidak. Sekarang saya mengerti cara menghubungkan input game ini, tetapi yang tidak saya dapatkan adalah bagaimana menghubungkan output ke LED. Maksud saya, tidak bisa hanya output sederhana (Q) ke LED dan tetangganya pelengkap (Q ') kan? Juga, pertanyaan lain, apakah saya perlu menggunakan input sinyal clock dari TFF? Jika ya, bagaimana caranya?
Julienn
2
Flipflop untuk setiap sel mengarahkan LED-nya secara langsung. Logika yang berkaitan dengan sel tetangga masuk ke input ke flipflip, tetapi output tetap lokal ke sel. Tidak, sakelar SPDT tidak diperlukan untuk debouncing. Ada berbagai teknik untuk mengeluarkan sinyal tunggal seperti dari sakelar SPST.
Olin Lathrop
1
Tidak, Anda tidak mendapatkan logika. Biasanya, output yang didebok tinggi, sehingga semua input ke gerbang NAND tinggi, yang mendorong output rendah. Ketika tombol apa pun ditekan, NAND yang mendapatkan input menjadi rendah, membuat output NAND menjadi tinggi. Tepi rendah ke tinggi ini menyebabkan FF beralih statusnya.
Olin Lathrop
0

Saya akan mengatakan bahwa sandal jepit T mungkin akan menjadi yang termudah karena Anda dapat beralih status keluaran mereka dengan satu input. Anda bisa menggunakan satu flip flop untuk setiap LED dan dengan input terikat ke tombol Anda dan output terikat ke LED Anda. Kemudian Anda bisa mengikat setiap tombol ke input dari 4 flip flop yang berdekatan untuk beralih status mereka juga.

Jika Anda ingin menggunakan sandal jepit JK, Anda dapat membuat sandal jepit T dari mereka dengan mengirimkan input Anda ke kedua input (J dan K)

Anonim
sumber
2
Anda dapat memperluas jawaban Anda dengan menjelaskan bagaimana Anda menghubungkan 5 sakelar ke setiap flip-flop tanpa membuatnya saling mengganggu. Juga, bagaimana dengan saklar bouncing?
Dave Tweed
0

Jika seseorang ingin membangun game seperti itu hingga ukuran 7x7 dari logika diskrit, desain yang paling praktis mungkin akan menggunakan register geser yang beredar untuk menahan keadaan papan, dan penghitung enam-bit untuk melacak pergeseran posisi data dalam register. Pindahkan data melalui shifter dalam kelompok 8 bit untuk menggerakkan tampilan multiplexed dan memindai keyboard multiplexed. Memiliki penghitung "flip light" tujuh-bit yang akan berjalan kapan saja enam bit terbawah adalah non-nol, atau ketika keadaan bit teratas cocok dengan keadaan tombol saat ini diterjemahkan. Balikkan keadaan lampu saat ini ketika semua hal berikut berlaku:

6-bit counter isn't  xxx111
6-bit counter isn't  111xxx
7-bit counter isn't xxxxx00
7-bit counter isn't xx00xxx
7-bit counter is    00xx0xx

Perhatikan bahwa sementara sejumlah besar logika akan diperlukan untuk memecahkan kode status penghitung itu, itu akan sepele dibandingkan dengan jumlah chip yang diperlukan untuk mengimplementasikan setiap lampu secara terpisah.

supercat
sumber