Dalam artikel ini, saya ingin berbicara tentang proyek pertama saya di bidang teknik listrik. Saya harus mengatakan bahwa, berdasarkan pekerjaan saya, saya jauh dari sirkuit dan elektronik radio, tetapi minat pada topik ini tidak memberi saya istirahat sejak usia dini. Bagi orang yang berpengalaman, informasi di bawah ini mungkin tampak terlalu jelas, dan banyak yang telah saya lakukan adalah "menciptakan sepeda." Tetapi mungkin beberapa noob, seperti saya, akan dapat menemukan sesuatu yang baru dan menarik. Siapa yang peduli, tolong, di bawah kucing.
Semuanya dimulai dengan ide membuat papan pengembangan untuk putri kecil saya. Pertama, saya ingin merentangkan tangan dan melakukan sesuatu sendiri. Kedua, saya ingin meregangkan otak saya dan menghasilkan sesuatu yang tidak ada di papan biasa jenis ini.
Setelah mengamati apa yang paling disukai anak itu dalam kehidupan sehari-hari, diputuskan bahwa selain heck-chain-handle-standar, Anda perlu menambahkan tombol untuk menekan dan perangkat tertentu yang menampilkan reaksi terhadap penekanan. Karena sesuatu yang sederhana, tetapi cerah, seharusnya ditampilkan, pilihannya jatuh pada matriks 8x8 LED merah.
Sampai penciptaan mainan, saya telah mengumpulkan debu di rak Arduino Uno selama beberapa waktu - itu menunggu sampai saya bisa menghasilkan sesuatu yang berguna selain sistem penyiraman warna otomatis, yang, selain kebosanan pitch itu sendiri, sedikit kurang dari yang tidak saya butuhkan. Saya pikir jamnya (Arduino) telah datang, karena Anda harus mulai dari suatu tempat. Setelah membaca manual untuk matriks, saya menemukan bahwa selain tidak menghubungkannya ke Arduino (hanya untuk itu Anda memerlukan 16 pin yang tidak ada di Arduino saya), tidak mungkin untuk mengontrol semua LED pada saat yang sama. Anda dapat secara bersamaan bersinar dengan dioda tertentu baik dalam satu baris atau dalam satu kolom (kontrol katoda umum atau anoda umum). Dan jika Anda melakukan ini secara konsisten dan cukup cepat, seseorang berhenti untuk melihat berkedip dan melihat gambar yang stabil. Saya juga belajar bahwa untuk Arduino ada banyak driver dan perpustakaan yang tidak nyaman mengelola proses ini. Dan fakta tidak adanya pengemudi seperti itu pada waktu itu telah menentukan hasil keseluruhan proyek.
Sementara saya menunda-nunda semuanya dan menunda memilih tempat terbaik untuk membeli driver, saya menemukan artikel tentang pengoperasian sistem pemicu. Bagi otak saya, humaniora, itu telah menjadi penemuan nyata, memberikan pemahaman tentang bagaimana memori diatur pada tingkat primitif. Lalu aku bertanya-tanya apakah aku bisa melakukannya tanpa Arduino dan membuat proyekku berdasarkan pemicu dan sirkuit logika.
Jadi, pertama-tama Anda harus memutuskan apa yang akan ditampilkan dan bagaimana melakukannya. Jelas bahwa perlu menerapkan sinyal pada gilirannya ke delapan baris matriks dan untuk setiap iterasi untuk menerapkan sinyal paralel ke kolom tertentu. Nah, itu memberi saya pemahaman tentang tiga komponen utama - generator pulsa, konverter jam menjadi delapan sinyal berturut-turut, dan konverter yang untuk masing-masing dari delapan sinyal akan menghasilkan kombinasi tertentu dari sinyal paralel. Itu tidak rumit.
Setelah beberapa pemikiran, sebuah sirkuit terbentuk di kepala di mana sinyal clock diubah menjadi kode biner menggunakan tiga pemicu JK yang terhubung seri, dan kemudian, menggunakan sirkuit logika, menjadi oktal. Rincian tentang pemicu semacam ini dapat dibaca setidaknya di Wikipedia . Singkatnya, ia memiliki dua input (J dan K) dan dua output (Q dan Qฬ), serta input sinkronisasi (CLK). Ketika unit logis diterapkan ke salah satu input selama pulsa sinkronisasi berikutnya, unit akan ditampilkan pada output yang sesuai dan disimpan di atasnya terlepas dari apakah pulsa sinkronisasi diterapkan lagi dan apakah nilai pada input yang dipilih berubah, asalkan input kedua tetap nol. Jika Anda mengirimkan unit ke input kedua, dan ke nol pertama, maka pada pulsa sinkronisasi berikutnya, nilai output pertama akan berubah menjadi nol, dan yang kedua menjadi satu. Tetapi jika suatu unit diterapkan pada kedua input pemicu, maka dengan masing-masing pulsa sinkronisasi, unit akan muncul secara bergantian pada salah satu output. Dan jika Anda mengambil dua pemicu, terapkan pulsa clock ke input sinkronisasi pertama, dan sinyal dari output Qฬ pertama ke input sinkronisasi kedua, sebagai hasilnya, output Q1 akan menghasilkan satu setiap dua siklus, dan Q2 setiap empat. Dengan demikian, penghitung biner dua digit diperoleh. Dan jika Anda menambahkan pemicu ketiga dengan cara yang sama, maka karena digit ketiga Anda dapat menghitung hingga delapan dengan kode biner - itulah yang Anda butuhkan.

Selanjutnya, perlu membuat tabel kebenaran dan memilih satu set kunci logis sehingga kode biner berubah menjadi delapan sinyal berturut-turut. Jika untuk beberapa tabel kebenaran dan operasi Boolean adalah sesuatu yang baru dan tidak diketahui, maka Anda dapat membacanya lagi di Wikipedia di sini dan di sini .
Tampaknya setengah dari pekerjaan itu ada, tetapi kenyataannya, itu tidak sesederhana itu. Ketika saya mengumpulkan bagian pertama dari rangkaian untuk tes di papan tempat memotong roti dan membayangkan bagaimana menerapkan bagian kedua dengan cara yang sama, fantasi saya menarik selama berbulan-bulan (dan mungkin bertahun-tahun - waktu untuk terlibat dalam hobi adalah sedikit lebih dari satu jam setelah bekerja) menggambar diagram dan menyusun tabel kebenaran. Memang, untuk delapan baris setiap gambar, Anda perlu membuat kombinasi kolom yang unik. Dan semakin banyak gambar yang ada, semakin banyak sirkuit akan menjadi mengerikan. Saya menyadari bahwa itu tidak akan berhasil untuk melakukan apa yang dimaksudkan pada kunci logis saja. Itu perlu untuk mencari sesuatu yang dapat menyederhanakan proses ini.
Solusinya adalah chip memori. Untuk tugas saya, memori EEPROM (Electrically Erasmable Programmable Read-Only Memory) sangat cocok - memori yang dapat diprogram dengan kemungkinan penghapusan listrik dengan input / output paralel. Memori memiliki berapa banyak input alamat, yang, pada kenyataannya, adalah bit dari alamat biner sel-sel memori. Yaitu, jika memori memiliki input alamat n, 2 ^ n sel dapat diprogram. Jumlah pin memori adalah apa yang disebut "panjang kata", atau panjang sebenarnya dari string biner yang dapat ditulis ke setiap sel. Produk dari jumlah sel per panjang kata menentukan jumlah memori dalam bit.
Sinyal input dalam bentuk kode biner tersedia untuk saya pada output pemicu JK. Masih melengkapi dengan bit dari tombol, yang harus bertanggung jawab untuk output gambar yang berbeda, dan intinya ada di topi.
Dan lagi, kurangnya pengalaman tidak memungkinkan saya untuk menilai kompleksitas proses secara memadai. Lagipula, memori perlu diprogram, dan untuk ini Anda memerlukan seorang programmer - perangkat ini sangat mahal untuk membelinya untuk kerajinan mainan satu kali. Googling menunjukkan bahwa secara teori dimungkinkan untuk melakukan ini dengan Arduino. Tetapi untuk pemrograman, perlu untuk secara bersamaan memasok sinyal ke input alamat dari chip memori dan output, yang selanjutnya akan mereproduksi sinyal. Dan kita juga membutuhkan sinyal kontrol chip. Artinya, sekali lagi lebih dari pin yang tersedia. Googling tambahan dibuka untuk saya register geser - sebuah chip yang mengingat urutan nol dan satu dan menampilkannya pada output paralel. Seringkali chip tersebut juga berfungsi sebagai buffer dan memiliki output yang secara berurutan dapat mereproduksi sinyal input. Artinya, jika Anda menghubungkan register yang sama berikutnya, maka Anda dapat secara bersamaan menampilkan urutan dua kali lebih besar dari satu. Saat Anda memasuki baris, bagian pertama akan melalui register pertama sebagai melalui buffer di bagian kedua, dan sisanya akan tetap berada di register pertama. Dengan menambahkan register ketiga, Anda dapat melipattigakan panjang string, dll. Untuk mengimplementasikan ini, Anda harus menulis sketsa dalam bahasa pemrograman yang tidak dikenal. Namun memiliki beberapa pengalaman dalam Python dan banyak contoh di Internet, setelah serangkaian coba-coba, tugas ini ternyata cukup layak. Sketsa dapat diambil di github .
Dan sekarang sketsa ditulis, rangkaian mikro terhubung, peluncuran dan ... tidak ada - memori tidak diprogram. Beberapa sampel, mengubah pengaturan perekaman, dan tidak ada hasil. Saya punya microcircuit W27C512-45Z. Pembacaan manual yang cermat menunjukkan momen yang tidak menyenangkan. Untuk menulis ke kontak spesifik dari sirkuit mikro, perlu untuk memasok arus 0,03A dengan tegangan 12V. Saya pikir saya baru saja membeli chip yang tidak begitu cocok. Tetapi setelah menggulir rak-rak toko komponen lokal, saya memastikan bahwa setiap orang membutuhkan 12V. Saya tidak memiliki catu daya laboratorium. Ada banyak blok 12V di rumah, tetapi mereka semua berdenyut, apalagi, saat ini sekitar 1A. Maafkan saya, insinyur yang berpengalaman untuk penistaan โโseperti itu, tetapi dalam keputus-asaan, saya memutuskan untuk mencoba melihat apakah keajaiban akan terjadi dengan blok-blok yang ada. Tidak terjadi Dua lintasan pertama dari rekaman itu tidak menghasilkan apa-apa, dan setelah sirkuit mikro ketiga, itu tidak lagi menunjukkan tanda-tanda kehidupan.
Di Internet, saya menemukan referensi untuk rangkaian mikro ST662AB tertentu - konverter 5V-12V - yang, bersama-sama dengan set kapasitor yang tepat, harus menghasilkan arus dan tegangan yang diperlukan. Sebenarnya, tidak mudah menemukan chip itu. Akibatnya, saya memesannya dari Cina, juga SMD. Dan bagaimana dengan pengiriman empat hingga enam minggu? Benar, belajar. Menggulir melalui artikel tentang pemrograman memori, saya menemukan sebuah menyebutkan chip yang dapat diprogram pada 5V. Itu tentang AT28C256. Dan memang, dalam lembar datanya tidak disebutkan 12V. Perlu mengambil! Benar, rangkaian mikro untuk kebutuhan saya sedikit berlebihan, karena memungkinkan saya untuk menghemat 256Kb: output 8-bit untuk alamat 32K, yang, mengingat tiga pin alamat yang digunakan untuk sinyal sinkronisasi garis, memungkinkan untuk menyandikan sebanyak 4.096 gambar (10 akan cukup untuk saya). Selain itu, pengiriman harus sudah dilakukan dari Inggris. Tetapi saya tidak menemukan pilihan lain, dan pada akhirnya, memori dapat diprogram ulang, dan ketika mainan tidak lagi relevan, chip tersebut dapat digunakan di tempat lain. Jadi setelah empat hari saya punya ingatan. Uji coba sketsa, dan kebahagiaan - semuanya bekerja.
Hal terakhir yang tersisa adalah memutuskan berapa banyak tombol yang akan ada, menggambar 8x8 gambar dan mengimplementasikan penambahan sinyal dari tombol ke sirkuit. Setelah memperkirakan tempat di papan tulis, saya memilih lima tombol. Mengingat permintaan yang tidak berharga dibandingkan dengan sumber daya memori, cara termudah adalah mengirim sinyal dari setiap tombol langsung ke input terpisah tanpa menggunakan pengkodean apa pun. Benar, saya masih harus menyelesaikan masalah beralih antar gambar. Dimungkinkan untuk menggunakan tombol dengan fiksasi tekanan. Tetapi implementasi seperti itu tidak cocok untuk digunakan oleh anak berusia satu tahun, karena itu, sebelum menekan tombol berikutnya, perlu untuk menekan yang berfungsi, dan itu sendiri cukup primitif. Saya ingin membuat skema untuk tombol tanpa memperbaiki, di mana menekan setiap tombol akan disimpan, dan bahkan membatalkan penekanan dari yang sebelumnya. Saya membaca tentang fitur menggunakan berbagai jenis pemicu, berharap beberapa dari mereka dapat menyelesaikan masalah ini sendiri, tetapi sayangnya. Setelah duduk sedikit dengan selembar kertas dan pensil, saya membuat diagram berikut (contoh untuk tiga tombol).
Pertama, Anda perlu menghubungkan semua tombol ke kolektor tertentu, yang pada output akan memberikan unit ketika Anda mengklik salah satu tombol. Untuk ini, kunci ATAU cocok. Karena paling sering sirkuit mikro kunci hanya memiliki dua input, maka perlu untuk menghubungkan dua tombol pertama ke satu tombol, kemudian menghubungkan outputnya ke input pertama dari kunci kedua, dan tombol ketiga ke input kedua. Dengan cara ini, Anda dapat terus menghubungkan lebih banyak tombol, menambahkan kunci baru untuk setiap tombol berikutnya. Selain itu, setiap tombol harus terhubung ke kunci XOR yang terpisah dan ke input J dari pemicu JK yang terpisah. Hubungkan output buffer OR ke input kedua kunci XOR, dan output dari setiap kunci XOR ke input K dari pemicu JK yang sesuai. Jadi, dengan menekan, misalnya, tombol 1, sebuah unit akan dikirim ke J1, dan XOR1 tidak akan dipicu, karena sebuah unit disuplai baik dari tombol maupun dari buffer OR. Pada output Q1, sebuah unit juga akan muncul dan disimpan. Pada saat yang sama, XOR2 dan XOR3 akan bekerja, memberi makan unit ke K2 dan K3. Dan jika pada Q2 atau Q3 sebelum itu ada unit, itu akan berubah menjadi nol.

Menghasilkan gambar 8x8 juga merupakan tes terpisah. Terlalu sedikit poin untuk mereproduksi gambar yang dapat dikenali. Namun menghidupkan fantasi, masih berhasil menggambar beberapa, misalnya android seperti itu.

Untuk gambar, saya membuat tabel kebenaran. Tetapi karena seseorang perlu mengirimkan satu untuk baris untuk matriks, dan nol untuk kolom, tabel harus dibalik. Saya menuliskan kode biner yang dihasilkan dalam pengkodean heksadesimal untuk penggunaan yang lebih mudah dalam sketsa Arduino.
Untuk membangun seluruh sirkuit, saya ingin memesan papan yang sudah jadi. Tetapi dari daftar perusahaan yang tersedia yang menawarkan layanan pembuatan papan tiruan, saya ditawari opsi termurah untuk dewan bilateral hampir $ 25. Saya tidak tahu, mungkin ini adalah biaya normal, tetapi bagi saya rasanya agak berlebihan. Selain itu, saya sama sekali tidak memiliki pengalaman dalam mendesain tata letak. Dan saya menemukan proses penyolderan sangat menyenangkan dan menenangkan. Karena itu, saya membeli papan universal, gulungan kawat multi-warna, komponen yang diperlukan dan duduk di majelis selama beberapa malam. Karena semua komponen beroperasi pada tegangan dari 5V ke 12V. Untuk kenyamanan, saya membuat baterai 9V.
Bagaimana semuanya berfungsi sebagai hasilnya dapat dilihat di sini , skema lengkap tersedia di github .
Sebagai "jantung" dari seluruh rangkaian, saya menggunakan generator pulsa. Saya tidak yakin berapa tepatnya frekuensi clock clock yang dibutuhkan, jadi saya menggunakan sirkuit yang sudah jadi dengan penyesuaian. Sayangnya, saya tidak memiliki osiloskop, tetapi dengan membandingkan penyesuaian dan lembar data sirkuit, sekitar 1KHz digunakan. Di sini, video menunjukkan bagaimana perubahan frekuensi dari rendah ke lebih tinggi, Anda dapat melihat bagaimana baris matriks digambar.
Terima kasih atas perhatian anda