Menempatkan game "Snake" di papan tempat memotong roti. Bagian 2: tampilan "vektor"

Pada bagian pertama, kami membuat sebuah mesin dengan logika permainan. Lebih tepatnya, tidak seluruh permainan, tetapi hanya gerakan ular itu sendiri. Di bagian akhir ini, kita akan mengetahui bagaimana menghubungkan layar dan menyelesaikan seluruh rangkaian. Resolusi Tinggi - Klik Untuk Klik




Gambarlah ekor


Kami sudah memiliki kepala yang berjalan sendiri di bidang 8 ร— 8, sekarang kita perlu menggambar ekor. Ini bukan satu poin, tetapi banyak, dan kami tidak bisa mentransfer koordinat (X, Y) ke decoder.

Biasanya pada matriks seperti kita, suatu โ€œ dinamis indikasi โ€ digunakan, dan garis-garis versi : ketika di putar isi setiap baris secara keseluruhan akan ditampilkan. Dalam kondisi kami, untuk ini kami harus menyimpan semua 64 bit di suatu tempat, atau dengan cara yang rumit untuk menghitung nilai untuk setiap baris. Tetapi ada pilihan lain untuk indikasi, itu juga cukup dinamis dalam arti bahwa tidak semua titik menyala secara bersamaan. Kita dapat menggunakan sesuatu seperti โ€œ tampilan vektorยป- tampilkan setiap titik secara bergantian, berikan koordinatnya ke layar. Pada setiap momen tertentu, hanya satu piksel yang akan menyala, yang akan kami kendarai melintasi layar.

Karena jumlah poin dengan kami dapat berbeda (tergantung pada panjang ekor), kecerahan gambar yang dihasilkan juga akan berubah seiring jalannya permainan dan pertumbuhan ular itu sendiri. Untuk mencegah hal ini terjadi, kami akan memesan sejumlah frame (10 = 1 frame untuk kepala, 1 untuk apple dan 8 untuk tail) dan kami akan mematikan layar untuk poin yang tidak perlu. A - apple, H - head, T # - sel ekor. Diambil dalam bentuk gelombang




Untuk ditampilkan, kami juga membutuhkan otomat. Mesin ini akan memiliki beberapa bagian: salah satunya adalah penghitung bingkai, yang hanya akan memotong 10 negara dalam lingkaran. Mari kita ambil IE18 dan beberapa logika untuk tujuan ini.



Hal yang paling sederhana adalah mengeluarkannya, dalam frame ini kita tinggal menyalakan layar dan memberi makan x / y bus nilai yang diberikan mesin otomatis. Untuk melakukan ini, gunakan buffer AP6 (Anda dapat mengambil AP5, tetapi tidak memiliki pinout yang nyaman).
Selanjutnya kita perlu menggambar ekor. Untuk melakukan ini, kita akan mengingat di negara kita apa yang baru saja kita lukis. Tambahkan arah pertumbuhan ekor ke sana (menggunakan skemadari bagian sebelumnya) dan tampilan. Untuk mengetahui bahwa kita perlu mengeluarkan buntut, kita cukup membandingkan nomor bingkainya dengan panjang buntut menggunakan pembanding 4-bit SP1 (U13). Kami akan menyimpan koordinat sebelumnya dalam register IR37 8-bit (atau IR27, mereka baru saja berakhir ...), dan untuk yang baru kami menggunakan EEPROM, tabel yang telah kami buat di bagian pertama. Arah bagian ekor yang diinginkan akan diambil dari mesin game menggunakan multiplexer KP15 dengan menerapkan nomor bingkai ke input alamat. Dan kita tidak boleh lupa bahwa kita menjaga arah kepala, yang berlawanan dengan arah pertumbuhan ekor, yang berarti bahwa salah satu komponen harus dibalik. Untungnya, Anda tidak perlu menginstal inverter terpisah, karena KP15 memiliki output terbalik. Total:


Mesin itu ternyata sedikit lebih membingungkan, tetapi, bagaimanapun, prinsip operasinya sama dengan orang lain.

Sebuah apel


Ini adalah bagian paling "kotor" dari skema kami. Pertama, karena membutuhkan posisi acak apel, dan mesin kami tidak memiliki setetes keacakan. Kedua, kita perlu membuang sinyal makan apel dari satu mesin ke mesin lainnya, sementara mesin-mesin itu memiliki sinyal clock yang berbeda. Dengan cara yang cerdas, ini disebut lintas domain jam, tetapi kami akan membuat penopang sederhana.

Di mana harus acak? Anda dapat menghasilkan generator pseudo-acak, tetapi ini membutuhkan logika yang tidak sepele. Pilihan lain adalah mengambil jam dengan frekuensi yang berbeda, lebih disukai tidak terlalu stabil, tetapi NE555 kami tidak berbeda dalam hal stabilitas. Di sirkuit multivibrator, Anda dapat menambahkan beberapa elemen berisik atau non-linear sesuai selera Anda (saya tambahkan secara seri dengan resistor JFET dengan rana yang menggantung di udara). Kami akan menerima koordinat acak dan menyimpannya dalam penghitung 6-bit. Tidak ada chip 6-bit yang siap pakai, jadi mari kita hubungkan dua casing IE10:



Di simpul yang sama, kita akan meletakkan buffer untuk menampilkan apel di layar dengan sinyal aktifkan. Dan juga pembanding untuk memahami bahwa apa yang sekarang ditampilkan di layar cocok dengan apel (dua SP1). Kami tidak hanya akan membandingkan apel dengan dirinya sendiri, untuk ini kami akan menggunakan bit ke-4 dari komparator dan memberikan sinyal izin di satu sisi dan satu di sisi lain.

Dan di sini peretasan kotor menunggu kita: tergantung pada rangkaian rangkaian mikro, penundaan sinyal resolusi, kapasitansi parasit papan tempat memotong roti dan fase bulan, pembanding dapat menyala sedikit lebih awal dari yang dimatikan oleh pengemudi U23. Lebih jelas apa yang terjadi:



Karena skema sinkronisasi yang dipilih (nanti), kesalahan semacam itu akan mengganggu kami. Adalah benar untuk menekannya dengan bantuan penundaan, misalnya dari beberapa inverter, atau bahkan menyebarkan inklusi dan perbandingan ke dalam fase yang berbeda. Tapi saya sudah cukup lelah dan hanya dihancurkan dengan kapasitor C5, karena ini adalah bagian kotor dari rangkaian :)

Mengukur dan memetik apel baru


Frame clock generator U7 utama, kami memiliki 10 di antaranya, maka kami akan membagi frekuensi ini dengan 16 menggunakan penghitung IE10 lain (U19) dan menggunakannya untuk mencatat langkah-langkahnya. Sinyal bahwa kepala bertepatan dengan apel muncul hanya pada satu frame dari 10 dan tidak akan bertahan sampai bagian depan pulsa mengganti frame. Di sini kita memerlukan sirkuit sinkronisasi. Saya memutuskan untuk mengambil opsi paling sederhana: kami akan memasukkan sinyal ke input asinkron dari pemicu, dan kami akan mengatur ulang ke setiap langkah baru dari mesin penerima.



Pada output dari pemicu, kita mendapatkan sinyal untuk menambahkan sel ekor lain (U6), serta untuk memulai penghitung yang menyimpan koordinat kepala (U21, U22), ini akan menghasilkan apel baru, mungkin acak.

Seluruh sirkuit



Skema klik-tayang yang hebat. Dan tampilannya di papan tempat memotong roti - di awal artikel

Bagian dan Komponen


papan tempat memotong roti


Anda dapat mengambil papan pengembangan China dari Ali, tetapi kemudian masalah dengan kontak yang buruk akan memakan waktu lebih banyak daripada langsung merakit sirkuit. Papan yang bagus direkomendasikan oleh Ben Eater, ini papan BB830 (putih) atau WBU-202 (kuning). Satu set kabel juga lebih baik untuk mengambil Wisher (WJW-60B), dan setiap set Cina, bahkan yang termurah, akan digunakan sebagai lunak.

sirkuit mikro


Saya mencoba untuk berkumpul di seri domestik paling populer, KP1533. Di Barat, ini adalah seri 74ALS, tetapi tidak ada sama sekali. Dalam skema ini, tidak ada parameter penting untuk pengaturan waktu atau kapasitas muat, sehingga Anda dapat mengambil serangkaian K555 (74LS) atau bahkan K155 (SN74) dengan aman. Dari yang diimpor, Anda dapat mengambil 74HC (tetapi kemudian untuk tingkat kompatibilitas Anda harus mengambil hampir semua chip dari seri ini) atau 74HCT, yang sepenuhnya kompatibel dengan seri TTL dan CMOS.

Menemukan sirkuit mikro domestik terbukti menjadi tugas yang menakutkan: tidak ada yang membutuhkannya di toko online populer dan menjual semua sisa makanannya sejak lama. Saya mengumpulkan beberapa chip di toko offline lokal, yang lain harus dipesan di Internet, tetapi banyak pemasok yang tidak tertarik untuk mengutak-atik pesanan kecil, jadi itu masih menyenangkan ...

BOM yang dihasilkan ternyata seperti ini (melalui garis miring, kemungkinan penggantian diindikasikan):

โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
          โ”‚ 1ร— *1 74*04
                โ”‚ 1ร— *3 74*00
                โ”‚ 1ร— *1 74*20
         โ”‚ 1ร— *2 74*74
          โ”‚ 2ร— *6 74*245 / *5 74*244 ( )
     โ”‚ 3ร— *1 74*85
  โ”‚ 2ร— *15 74*251 / *7 *151
        โ”‚ 1ร— *18 *163
                โ”‚ 4ร— *18 *163 / *10 *161
        โ”‚ 3ร— *27 74*377 / *37 74*574 ( )
                โ”‚ 1ร— *37 74*574 / *27 74*377 ( )
EEPROM          โ”‚ 3ร— AT28C16 / CAT28C16
     โ”‚ 1ร— *7 74*138 / 4 74*155 ( )
                โ”‚ 1ร— 5611 CD4028 ( ) /  AT28C16
       | 2ร— 10061 NE555
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

Total


Saya harap Anda menyukai skema ini dan, mungkin, seseorang akan mengangkat tangan untuk mengulanginya, atau melakukan sesuatu yang lebih menarik)) Anda

dapat menonton video di YouTube:

dalam komentar di bagian sebelumnya, kami menyarankan untuk memfilter pada matriks LED, ini adalah hal yang sangat baik, tetapi dalam pencahayaan yang redup Anda dapat melakukannya tanpa itu.

Anda dapat mengunduh arsip dengan sirkuit EEPROM dan membuangnya di sini .



Bahan bekas


1. Buku Harris & Harris yang tidak pernah lelah merekomendasikanYuripanchul- untuk panduan umum.

2. Referensi Biryukova S.A. - untuk mencari pinout dari sirkuit mikro tertentu.

kedua buku dapat ditemukan dalam PDF, tetapi versi kertasnya lebih bagus

3. Situs web Ben Eater dan saluran YouTubenya adalah untuk inspirasi))

4. Wavedrom adalah untuk menggambar diagram

Untuk semua orang yang telah membaca sampai akhir, terima kasih atas perhatian!

All Articles