
Suatu hari, melihat iklan di Avito, saya menemukan hal yang sangat menarik - papan tanda bahaya atau tampilan sandal jepit dalam bahasa Inggris. Pajangan semacam itu digunakan untuk menampilkan informasi di bandara, stasiun kereta api, stadion atau indikator rute pada angkutan umum.
Saya pikir dengan jenis tampilan ini Anda dapat melakukan banyak hal menarik.
Di mana layar saya dipasang, orang hanya dapat menebak dari sisa tulisan ("STORE"). Mungkin itu adalah tempat informasi di stasiun kereta atau perhentian PL - tulis ide Anda di komentar.
Layar adalah matriks sel berukuran 7 baris dengan 30 kolom. Setiap sel berisi piring dua warna yang berputar dan LED hijau. Dewan memiliki sejumlah elemen logika dari seri 74HCxxx dan sirkuit mikro lainnya, yang, ternyata, hampir cukup untuk mengontrol layar melalui antarmuka serial sederhana.
Setelah pembelian, saya menghabiskan sedikit waktu mencari informasi tentang cara bekerja dengan layar seperti itu, mengingat bahwa saya hanya memiliki bagian yang langsung menampilkan gambar, dan biasanya ada juga pengontrol yang dapat mengontrol keyboard atau melalui port UART dengan perangkat lunak PC .
Tidak mungkin menentukan afiliasi pabrikan dengan tulisan di papan tulis, tetapi mungkin saya tidak berusaha keras, karena lebih menarik untuk mengetahui cara kerjanya, menggambar diagram perangkat dan mengembangkan modul untuk berinteraksi dengan mikrokontroler yang khas.
Tetapi pertama-tama, Anda harus menetapkan sendiri tujuan tertentu, untuk itu Anda dapat menerapkan layar ini dalam kehidupan sehari-hari. Gagasan pertama adalah arloji yang menampilkan informasi tambahan tentang cuaca di jalan dan di rumah, waktu, tanggal, pesan singkat yang memotivasi;), dll. Lalu saya berpikir bahwa jika Anda memutar layar 90
Β° , sepertinya gelas untuk Tetris, jadi diputuskan untuk membuat Tetris, dan kemudian akan terlihat.
Bagaimana cara kerja layar elektromekanis?
Sangat sederhana: setiap sel layar (kotak centang) terdiri dari disk - magnet permanen datar dicat kuning di satu sisi dan hitam di sisi lain, dan elektromagnet yang terletak di bawah disk. Ketika menerapkan impuls listrik ke koil elektromagnet, bendera terbalik dan, yang penting, dipasang di satu posisi. Saat mengubah arah arus dan menerapkan pulsa berulang, bendera diputar dan diperbaiki oleh sisi lain. Untuk switching, pulsa dengan durasi 1 milidetik dan tegangan 12 volt sudah cukup.
Resistansi kumparan elektromagnet sekitar 18 ohm.
Untuk kenyamanan, kumparan melalui dua dioda digabungkan menjadi matriks baris dan kolom. Untuk beralih di mana saja di layar, Anda perlu mengaktifkan sumber arus (sumber arus) di saluran dan sumber arus (sink saat ini) di baris, di persimpangan yang ada kumparan elektromagnet atau, sebaliknya, untuk beralih ke sisi lain. Bahkan, ini mirip dengan mengendalikan motor DC melalui jembatan-H, hanya dalam mode berdenyut.
Dengan cara mengelola bendera secara teori, kami menemukan jawabannya. Saatnya beralih ke implementasi praktis.
Teknik membalikkan layar
Berbekal multimeter dan Kicad, saya mulai menggambar ulang tata letak layar, mulai dengan mengendalikan LED. Ternyata bagian ini swasembada, dan ketika menerapkan sinyal daya dan kontrol, Anda dapat menyalakan setiap LED di setiap baris layar melalui antarmuka yang cukup sederhana. Hanya satu baris yang dapat aktif kapan saja, sehingga output gambar harus dinamis.
Sirkuit modul terdiri dari matriks LED yang katoda terhubung ke driver LED Toshiba TB62705. Dari sudut pandang logika kontrol, ini adalah register geser 8-bit biasa yang terhubung dalam sebuah rantai. Anoda LED di setiap baris terhubung dan terhubung ke saluran transistor MOSFET. Sumber dihubungkan ke output dari konverter DC-DC, dan gerbang dari semua 7 transistor terhubung ke output dari decoder 3: 8 74HC238.
Jadi, untuk mengontrol LED, Anda harus memilih garis layar dengan mengirimkan nomornya ke input decoder, kemudian memuat 32 bit data melalui input SERIAL dan CLOCK dari driver LED pertama. Kemudian file log. "1" ke input LATCH, dan LED yang sesuai menyala sambil menahan LATCH ke "1".
Untuk mengedipkan LED, saya menggunakan papan
Teensy 3.5 yang kompatibel dengan
arduino yang kompatibel. Contoh kode kontrol LED dapat ditemukan di
GitHubBagian kedua dari skema, yang bertanggung jawab untuk mengelola penutup mata, sedikit lebih rumit.
Bagian daya dari kontrol speaker terdiri dari sepasang sirkuit sumber / sink saat ini, output yang terhubung melalui dioda pelindung ke output pertama dari setiap koil di kolom. Chip Toshiba TBD62783 digunakan sebagai sumber arus, dan ULN2803 favorit TI digunakan sebagai selokan. Kesimpulan kedua kumparan digabungkan dalam baris dan terhubung ke konektor pada papan layar. Rupanya, ini dilakukan untuk mengambil manajemen string dalam modul terpisah, karena beberapa layar dapat digabungkan menjadi satu layar panjang. Namun, tidak jelas mengapa pengembang menempatkan semua komponen yang diperlukan pada setiap papan layar untuk mengontrol LED.
Logikanya terdiri dari delapan 3: 8 decoder 74HC238, input kontrol yang terhubung secara paralel. Output dari bahkan decoder terhubung ke input kontrol dari sumber saat ini, dan yang aneh terhubung ke input dari saluran air. Input permisif dari 74HC238 terhubung ke decoder 3: 8 lainnya, yang sepenuhnya menghilangkan situasi ketika sumber saat ini dan sirkuit saat ini aktif pada saat yang sama. Input aktifkan dekoder umum terhubung ke chip pembanding dan diaktifkan hanya ketika nilai pada inputnya cocok. Bagian diagram ini kemungkinan besar juga bertanggung jawab untuk menggabungkan beberapa modul menjadi satu layar besar.
Jadi, untuk memilih kolom tertentu, Anda perlu mengirim nomornya (0-7) dalam grup ke bus COL_A0-A2, dan kemudian mengaktifkan output dari 74HC238 spesifik dengan memasok nomornya ke input COL_EN_A0-A2 dari dekoder umum. Selain itu, input A0 dapat digunakan sebagai indikator sumber / sink, dan 2 bit sisanya - sebagai nomor grup (0-3).
Logika kontrol dan input daya dialihkan ke dua konektor IDC 50-pin. Pengkabelan salah satunya ditunjukkan pada diagram.

Setelah menganalisis rangkaian, saya menyadari bahwa mengibarkan bendera tanpa bantuan Kicad dan besi solder tidak berhasil, dan mulai membuat modul untuk memilih string dan pemasangan.
Modul Adaptor dan Manajemen String
Untuk menyederhanakan desain, saya memutuskan untuk mengulangi implementasi pemilihan kolom dan ditempatkan pada sirkuit TBD62783 dan ULN2803 dipasangkan dengan decoder 74HC238 untuk memilih garis yang diinginkan, serta satu chip logika 74HC00 (4xNAND) untuk secara jelas memisahkan mode SET, RESET dan PULSE, yang secara langsung mengaktifkan suplai tegangan. ke elektromagnet yang dipilih. Untuk menyimpan kesimpulan mikrokontroler, diputuskan untuk menghubungkan sinyal pemilihan baris dan kolom ke output dari satu register geser.
Akibatnya, untuk mengelola bendera yang Anda butuhkan:
- kirim dan perbaiki koordinatnya dalam kode serial melalui SERIAL / CLOCK / LATCH
- pilih negara SET / RESET yang diinginkan
- aktifkan secara singkat PULSA
Decoding byte koordinat:

Versi pertama dari sirkuit tanpa register geser disusun pada papan tempat memotong roti tanpa solder. Setelah memeriksa dan sedikit kegembiraan bahwa semuanya akan terbakar, saya menyalakan daya dan secara manual berdenyut pulsa PULSA dengan menekan tombol. Arus yang mengalir melalui koil elektromagnet hanya dalam kasus terbatas pada sumber daya laboratorium. Kotak centang beralih dengan sukses, dan ketika mengubah tingkat SET / RESET, itu beralih kembali. βIni sukses,β pikir saya, dan mulai mentransfer sirkuit ke papan tempat memotong roti biasa menggunakan MGTF-0,07 favorit saya dan kawat kynar single-core untuk bus listrik / darat.
Untuk terhubung ke layar melalui konektor 50-pin di papan tulis, perlu menggunakan 22 kontak + daya, jadi saya tidak ingin mengacaukan dengan kabel individu. Penggunaan kabel datar, untuk IDE atau, lebih tepatnya, perangkat SCSI lama, disarankan.
Sedikit googling membawa saya ke alat khusus untuk crimping konektor IDC, yang diputuskan untuk segera dibeli:
Crimper ProsKit 6PK-214 untuk konektor IDC . Setelah berlatih menggunakan konektor kecil, pertama kali saya membuat loop 20 sentimeter dengan konektor IDC-50F di ujungnya.
Kami menulis program kontrol
Seperti yang saya sebutkan di atas, TEENSY 3.5 digunakan sebagai pengontrol kontrol, lingkungan pengembangan yang merupakan IDE Arduino, sehingga program ditulis dalam dialek arduino C.
Fungsi utama mengubah status titik layarvoid update_dot(bool state, byte row, byte col) { byte cmd=0;
Saya melakukan beberapa percobaan untuk menentukan tegangan optimal dari sumber daya dan waktu pengisian pulsa. Ternyata 12V dan 1ms sudah cukup untuk fiksasi bendera yang stabil di salah satu posisi.
Setelah tes diisi dengan satu warna, saya perhatikan bahwa satu "piksel" rusak dan tidak terbalik. Pengukuran resistansi koil dengan multimeter menunjukkan beberapa megaohm, dan pemeriksaan terperinci mengungkapkan bahwa satu kesimpulan muncul. Sangat beruntung bahwa "pixel" yang tidak berfungsi berasal dari tepi layar, jadi saya berhasil menyolder kawat. Masalahnya telah diatasi.
Inilah yang terjadi setelah percobaan pertama dengan isi dan output teks:
Tetris
Menulis implementasi Tetris dalam C lebih mudah dari yang saya kira. Berkat Javier LΓ³pez dan tutorialnya
Tetris tutorial di C ++ untuk pemula . Saya menulis ulang fungsi-fungsi utama saat saya memahaminya, dan mengadaptasi kode ke fitur layar saya (kurangnya batas dan resolusi rendah). Saya tidak akan menanggung detail pekerjaan, manual menjelaskan semuanya secara detail.
Untuk kontrol, modul analog joystick digunakan, jadi saya harus menulis fungsi untuk mengubah nilai pada output ADC ke konstanta digital. Ada kesulitan untuk mencegah positif palsu dan di sisi lain untuk memastikan gameplay yang benar. Jika posisi joystick tidak berubah setelah pembacaan keadaan berikutnya, penundaan ditambahkan.
Setelah bermain selama sekitar 10 menit, saya menyadari bahwa saya bosan, karena kecepatan bentuk jatuh tidak berubah dan skornya tidak ditampilkan sama sekali. Tidak ada elemen kompetisi.
Menampilkan akun dengan bendera jelek karena kurangnya ruang di layar, jadi diputuskan untuk menggunakan LED untuk membuat pesawat alternatif untuk menampilkan informasi. Saya menemukan di internet sedikit representasi font 3x5 untuk angka dari 0 hingga 9 dan menulis fungsi untuk menampilkan skor dengan jumlah baris yang dihapus. Untuk kecantikan yang lebih besar, saya memutuskan untuk menambahkan kedipan dari garis yang terisi ketika menghilang.
Sifat dinamis tampilan mendorong gagasan untuk memanggil fungsi pembaruan pada bagian LED layar dalam penghentian waktu. Frekuensi interupsi dan waktu penahanan string LED dalam keadaan aktif menentukan kecerahan cahaya.
Saya juga membuatnya sehingga kecepatan jatuhnya angka tetramino meningkat ketika garis-garis dihapus. Dalam versi pertama, angka-angka digeser satu baris ke bawah setiap 200 ms. Jika Anda mengambil dari nomor ini 40 ms setiap 10 baris yang dihapus, maka kecepatan permainan sangat dipercepat, dan ada minat. Rekor saya adalah 38 baris!
Itu kasus langka ketika video vertikal sangat cocok.
Kode proyek ,
tata letak layar dan modul antarmuka diposting di GitHub.
Jika Anda punya ide apa lagi yang bisa Anda lakukan dengan layar seperti itu, silakan tulis di komentar.
Tautan yang bermanfaat:
1.
Hackaday: Tampilan Flip-Dot & Pengontrol DIY .
2.
Tetris tutorial di platform C ++ independen yang berfokus pada logika permainan untuk pemula .
3.
Repositori proyek di GitHub .