Cara membuat keyboard - Matriks

Diposting oleh : Komar alias Michał Trybus; Terjemahan bahasa Inggris-bahasa Indonesia : firerock
Asli : blog.komar.be/how-to-make-a-keyboard-the-matrix

Ini adalah pos pertama dalam seri tentang keyboard; Saya harap dia tidak akan menjadi yang terakhir. Saya ingin mengakhiri dengan kursus pembuatan keyboard dari awal. Hari ini saya akan berbicara tentang input-output digital dan matriks keyboard. Bekali diri Anda dengan pengetahuan sekolah dasar di bidang elektronik - dan mari kita pergi.

Mengapa sebuah matriks?


Dan bagaimana kita akan membuat matriks? Dan yang paling penting - mengapa itu dibutuhkan sama sekali? Ya, ini terutama disebabkan oleh keterbatasan fisik dari mikrokontroler tempat keyboard itu dibangun. Faktanya adalah bahwa dengan peningkatan jumlah output untuk mikrokontroler dan sirkuit logika yang dapat diprogram, ukurannya juga tumbuh, yang, pada gilirannya, memerlukan peningkatan konsumsi energi, kemampuan, tetapi yang terpenting, harga. Akibatnya, Anda dapat memilih chip murah dengan kinerja kecil (yang cocok untuk Anda), tetapi dengan sejumlah kecil input dan output, atau chip yang lebih kuat, yang kinerjanya, bagaimanapun, sangat melebihi kebutuhan Anda. Tetapi hanya chip yang kuat ini akan memiliki output yang cukup untuk menghubungkan setiap tombol pada keyboard.

Selama beberapa dekade, praktik ini telah berkembang dalam bidang elektronik dengan bantuan berbagai trik untuk secara artifisial memperluas kemampuan komunikasi built-in dari prosesor dan pengontrol. Salah satu metode tersebut, yang sangat cocok untuk kontak mekanis (tombol), adalah pembuatan matriks. Untuk memahami cara kerjanya, diperlukan pengetahuan dasar. Sebelum kita melanjutkan, silakan menyegarkan kembali hukum Ohm .

Sedikit teori


Untuk memahami cara kerja elektronik digital, Anda perlu mempelajari dua prinsip dasar.

Prinsip satu mengatakan bahwa proses komunikasi dalam suatu sirkuit bukan tentang mentransmisikan atau menerima sesuatu di sana. Untuk memastikan komunikasi antara kedua perangkat, Anda cukup menghubungkan temuan mereka satu sama lain dengan bahan konduktif listrik. Setelah ini, diasumsikan bahwa keadaan material (tegangan dan arus) pada kedua ujungnya akan sama. Pada kenyataannya, tentu saja, tidak demikian, tetapi untuk komunikasi yang lambat dan konduktor pendek, asumsi kami berfungsi dengan baik. Ternyata mengirim dan menerima informasi sebenarnya adalah pembagiannya.

Dari sisi pemancar, Anda cukup mengubah keadaan listrik konduktor (dengan menyuntikkan arus searah ke dalamnya, mengubah potensinya), berharap bahwa penerima akan dapat mendeteksi perubahan ini dan memahaminya dengan benar.

Dari prinsip ini juga mengikuti bahwa tidak ada hubungan antara arah komunikasi dan arah arus listrik. Banyak orang secara keliru menganggap sebaliknya, dan ini mencegah mereka untuk memahami cara kerja elektronik.

Jika Anda ingin mengirim tingkat logika "0", maka biasanya untuk ini tegangan pada output pemancar diturunkan ke 0 V, dan arus mulai mengalir dari penerima ke pemancar sehingga penerima dapat menentukan bahwa tingkat logika sesuai dengan "0". (Sedangkan arah sebaliknya dari arus akan berarti bahwa di suatu tempat di sirkuit ada potensi negatif - dan ini, sebagai suatu peraturan, tidak terjadi dalam elektronik digital.) Di sisi lain, untuk mentransmisikan level logika "1", tegangan yang sama dengan tegangan suplai diterapkan, dan karena ini paling sering merupakan tegangan tertinggi dalam rangkaian, tidak akan ada lagi yang tersisa untuk arus listrik selain mengalir dari pemancar ke penerima.

Prinsip nomor duaterletak pada kenyataan bahwa tidak mungkin untuk menentukan keadaan konduktor tanpa mengubah keadaan ini. Tidak masalah jika Anda akan mengukur tegangan atau arus - dalam hal apa pun, untuk ini perlu bahwa elektron mengalir melalui perangkat pengukur Anda. Aliran elektron - ini adalah arus listrik, dan karena mengalir, itu berarti bahwa di simpul yang Anda hubungkan untuk pengukuran, arus dan tegangan telah berubah (lihat undang-undang Kirchhoff ). Oleh karena itu, jika Anda perlu "mentransmisikan" informasi dengan mengubah status output yang terhubung secara elektrik ke output lain, maka Anda perlu mempertahankan status ini, yang berarti Anda harus mematuhi semua persyaratan yang diberlakukan oleh penerima.

Tombol


Tombol mekanis (dan dalam konteks ini kata "mekanis" tidak terhubung dengan frasa "keyboard mekanis") hanyalah sepasang kontak logam yang, secara kontak, secara elektrik menghubungkan kedua terminal. Tentu saja, ada jenis switch lain yang secara struktural lebih kompleks dan memiliki lebih banyak output, tetapi mereka tidak menarik bagi kami karena mereka tidak digunakan pada keyboard.


Tombol Cherry MX. Sumber Gambar: wiki Deskthority

Nah, dan bagaimana kita akan menghubungkan tombol ke input mikrokontroler? Pada dasarnya, input apa pun dapat beroperasi dengan dua level logis yang memungkinkan: "0" dan "1". Ini adalah praktik umum untuk menerima tegangan mendekati 0 V sebagai nol logis, dan tegangan dekat dengan tegangan suplai (biasanya 5 V atau 3,3 V) sebagai unit logis. Tetapi masalahnya adalah bahwa tombol mekanis saja tidak dapat mengontrol tegangan. Ia mengontrol arus - yaitu, jika kita menghubungkan dua node dengan potensial listrik yang berbeda melalui tombol, maka arus di antara node-node ini akan mengalir jika dan hanya ketika tombol ditekan.

Tetapi jika kita menambahkan resistor, maka kita dapat dengan mudah mengkonversi arus ke tegangan.


Tombol resistor pull-up

Lihatlah diagram ini. Ketika tombol tidak ditekan (sirkuit rusak), arus tidak mengalir melaluinya, sehingga tegangan pada simpul "A" akan mendekati tegangan pasokan VCC (pada kenyataannya, kurang dari VCC dengan nilai penurunan tegangan melintasi resistor sama dengan R • I). Ketika tombol ditekan (sirkuit tertutup), arus mengalir melalui resistor ke ground. Mengingat bahwa hambatan tombol tertutup sangat kecil (dari urutan ratusan miliom), tegangan pada simpul "A" akan mendekati "0".

Dalam konfigurasi ini, resistor disebut pull-up karena "menarik tegangan naik" ke level VCC. Dan tanpa menghubungkan ke catu daya melalui resistor, tidak akan ada tegangan sama sekali di simpul "A" (dalam hal ini, output dari sirkuit mikro disebut "menggantung di udara" atau dalam keadaan impedansi tinggi).

Perlu dicatat bahwa di dalam sebagian besar mikrokontroler modern sudah ada resistor pull-up yang dapat dengan cepat dihubungkan atau diputus menggunakan program. Jadi, cara utama untuk menghubungkan tombol ke mikrokontroler adalah sebagai berikut: satu pin tombol adalah untuk input mikrokontroler, pin tombol lainnya adalah ke tanah. Dalam hal ini, jika tombol tidak ditekan, maka "1" dikirim ke mikrokontroler, dan jika ditekan, maka "0". Mungkin ini bertentangan dengan intuisi, tetapi metode koneksi ini adalah yang paling populer.

Harap perhatikan bahwa jika kami membiarkan salah satu pin tombol tergantung di udara, yaitu, jika kami tidak menghubungkannya di mana pun, tombol ini tidak akan berfungsi sama sekali: jika Anda tidak menekannya, itu tidak akan mempengaruhi keadaan listrik dari output mikrokontroler. Kami masih akan menggunakan properti ini ketika kami membuat matriks.

Prinsip matriks


Prinsip dasar matriks keyboard adalah kemampuan untuk menghubungkan lebih dari satu tombol ke satu input mikrokontroler.

Dengan menggunakan transistor atau output mikrokontroler yang dikonfigurasi dengan benar , kita dapat membuat tombol-tombol terhubung ke ground satu per satu, sementara sisanya akan menggantung di udara. Kesimpulan yang tersisa dari masing-masing tombol digabungkan menjadi satu node dan terhubung ke inputmikrokontroler. Saya menurunkan resistor pull-up, karena kita tahu bahwa itu sudah ada di dalam mikrokontroler, pada tahap inputnya. Kami bergantian "menyalakan" setiap tombol, menghubungkan nomor output 1 ke ground melalui output yang sesuai dari mikrokontroler, setelah itu kita dapat membaca keadaan tombol pada input dengan menghapus tegangan dari nomor outputnya 2. Tombol lain yang terhubung ke input yang sama tidak mempengaruhi pada kondisinya, karena kesimpulan nomor 1 mereka saat ini menggantung di udara. Diagram berikut menggambarkan ide ini.


Banyak tombol, satu input (simpul "A")

"A" adalah satu-satunya input dari mikrokontroler, dan "C1" .. "Cn" adalah outputnya. Pada salah satu output, logika “0” diatur, yaitu di dalam sirkuit mikro, kontak ini terhubung ke tanah - oleh karena itu, arus akan selalu mengalir ke kontak ini (sesuai dengan prinsip dasar pertama). Sekarang, ketika tombol yang terhubung ke output ini ditekan, maka melalui itu input "A" akan segera "ditekan" ke tanah, dan itu akan diatur ke "0". Menekan tombol lain tidak akan mengubah apa pun, karena output pentanahannya tidak terhubung di mana pun saat ini. Ketika kita perlu polling tombol berikutnya, kita menghapus "0" logis dari output saat ini dan mengatur level ini ke output berikutnya, sehingga setiap saat hanya satu dari output mikrokontroler yang akan diaktifkan.

Konfigurasi seperti itu (ketika output terhubung ke ground atau dinonaktifkan sama sekali) disebut output open drain (OS) (secara historis, dengan open collector (OK)). Di sini saya membuat beberapa penyederhanaan - pada kenyataannya, kontak tidak dapat sepenuhnya terputus dari rangkaian kecuali secara fisik terputus darinya. Tetapi untuk I / O digital sederhana, penyederhanaan ini cukup cocok. Kebanyakan mikrokontroler menyediakan kemampuan untuk secara terprogram mengkonfigurasi kontak keluarannya agar berfungsi dalam mode OS. Tetapi bagaimana jika kita tidak memiliki kesempatan seperti itu? Ada konfigurasi lain - mode push-pull; Hari ini opsi ini adalah salah satu yang paling populer. Konfigurasi ini bekerja sedikit berbeda. Dalam "0" negara, output masih didorong ke tanah, tetapi ketika "1" terjadi, itu ditarik ke tegangan suplai VCC,sehingga output di udara tidak lagi hang, sekarang itu sendiri bisa menjadi sumber arus.

Perubahan apa yang akan terjadi dalam desain matriks? Jika kita tidak akan menekan beberapa tombol secara bersamaan, maka tidak ada. Tetapi jika kita mau, maka lihatlah gambarnya dan bayangkan sebentar apa yang akan terjadi kemudian. Dengan mengklik dua tombol, kami menghubungkan dua output yang lebih rendah ke loop tertutup. Jika pada saat yang sama salah satu dari mereka dalam keadaan "0" dan yang lainnya dalam keadaan "1", maka arus listrik akan mengalir dari output yang diatur ke "1" ke output yang diatur ke "0". Dan karena arus ini tidak dibatasi oleh apa pun (tidak ada resistor), sirkuit tidak hanya menjadi tidak stabil, tetapi juga dapat terbang keluar dari chip. Yah, tentu saja, tidak mungkin untuk mempertimbangkan keadaan logis secara normal.

Menambahkan Baris


Anda dapat mempertimbangkan contoh sebelumnya sebagai matriks yang terdiri dari satu baris. Sekarang mari kita tingkatkan dengan menambahkan baris tambahan. Bahkan, jika kita dapat menggantung seluruh baris pada satu input, lalu mengapa kita tidak bisa menggantung seluruh kolom tombol pada satu output? Benar, ada prasyarat - setiap tombol kolom harus terhubung ke input mikrokontroler yang terpisah.

Jika kita mengatur tombol dalam bentuk matriks reguler, maka kondisi ini akan terpenuhi secara otomatis. Dan gambar berikut menunjukkan bagaimana matriks tombol yang terdiri dari n kolom dan baris m akan terlihat seperti ( belum memperhatikan angka hijau ).


Matriks keyboard sederhana

Membaca matriks ini sangat sederhana. Kami melakukan polling satu kolom pada satu waktu. Kolom bacaan dipilih dengan menghubungkan salah satu output "C1" .. "Cn" ke ground (output dalam mode OS diterjemahkan ke "0"). Sekarang, secara bergantian polling baris “R1” .. “Rm”, kita dapat menentukan status setiap tombol dari kolom yang dipilih. Tombol-tombol dari kolom lain tidak mempengaruhi apa pun, bahkan jika mereka ditekan, karena pada saat ini ground lead mereka tergantung di udara (atau, seperti yang mereka katakan dalam elektronik, mereka berada dalam keadaan Hi-Z).

Setelah seluruh kolom disurvei, kita pergi ke yang berikutnya, melepaskan output saat ini dan mendorong yang berikutnya ke nol. Pemindaian matriks dianggap selesai ketika semua kolom disurvei. Jika semuanya dilakukan cukup cepat, penata letak tercepat tidak akan melihat interval antara jajak pendapat kolom. Bahkan dengan mikrokontroler 16 MHz, kita dapat dengan mudah memindai seluruh matriks seribu kali per detik, sedangkan pengetik huruf tercepat dalam pengujian di hi-games.net mencapai kecepatan 203 kata per menit (wpm) - yaitu, kurang dari 17 klik pada kedua.

Saat merancang keyboard menggunakan matriks, kami mengurangi jumlah pin yang diperlukan untuk menghubungkan semua tombol. Tetapi untuk mengurangi jumlah kesimpulan seminimal mungkin, kita perlu menyusun matriks sehingga jumlah kolom sedekat mungkin dengan jumlah baris. Dalam situasi yang ideal, jika jumlah tombol adalah , maka yang terbaik yang dapat kita capai dengan matriks adalah 2nPin mikrokontroler yang sibuk. Namun, hari ini, ketika menyusun matriks, jarang ada orang yang berusaha untuk meminimalkan jumlah kaki yang terlibat, karena mikrokontroler modern, sebagai suatu peraturan, memiliki cukup banyak kesimpulan bebas. Selain itu, optimalisasi maksimum dari matriks selanjutnya dapat menyebabkan ketidaknyamanan - kabel papan atau distribusi kabel pada perangkat akhir akan terasa lebih rumit. Oleh karena itu, ada baiknya menggunakan cara yang lebih mudah: ketika menyusun matriks, cobalah untuk mengikuti pengaturan fisik tombol. Dalam hal ini, untuk keyboard komputer standar, matriks paling sederhana hanya memiliki 6 baris dan sejumlah kolom, tergantung pada tata letak yang diinginkan. Tentu saja, dari sudut pandang jumlah kesimpulan yang terlibat, solusi ini bukan yang paling optimal, tetapi di masa depan, setidaknya kabel akan disederhanakan.

Tetapi bagaimana jika kita tidak memiliki output drain terbuka?


Anda mungkin bertanya: apa yang harus kita lakukan jika masih tidak ada mode OS di mikrokontroler yang dipilih? Yah, kita sudah menemukan masalah seperti apa yang bisa terjadi, dan menarik output ke VCC (yaitu, "menghubungkan" mereka ke catu daya) bukanlah ide yang baik. Ada banyak cara untuk mengatasi masalah ini; Di antara mereka ada tidak hanya buffer output OS khusus, tetapi bahkan menggeser register dengan output OS - untuk lebih meminimalkan jumlah kaki yang terlibat. Tetapi ada teknik lain yang sangat populer, yang sering digunakan dalam desain keyboard komputer (pada kenyataannya, itu banyak digunakan di masa lalu).

Masalah kolom yang terhubung ke output push-pull muncul pada saat ketika dua tombol yang terletak pada garis yang sama ditekan bersamaan, dan pada saat yang sama, menekan tombol akan menyurvei kolom di mana salah satu tombol berada.


Masalah output push-pull

Dari output, yang ditarik ke "1" (dan tidak menggantung dalam kondisi Hi-Z), arus mulai mengalir. Ini melewati tombol tertutup terdekat, lalu melalui tombol tertutup di kolom diinterogasi, dan akhirnya mengalir langsung ke output yang ditetapkan ke "0". Hal ini dapat menyebabkan apa saja - dari ketidakmungkinan pembacaan yang dapat diandalkan atas status keyboard hingga kegagalan mikrokontroler itu sendiri.

Tetapi karena kita terpaksa berurusan dengan masalah ini, kita dapat menerapkan trik hebat: mengubah output push-pull menjadi semacam output drain terbuka. Saya sering menemukan solusi ini dalam desain keyboard lama. Mengingat bahwa arus hanya mengalir ke output (terhubung ke kolom), tetapi tidak pernah mengalir keluar dari mereka, kita dapat membatasi arah arus menggunakan dioda. Dioda adalah perangkat sederhana yang memungkinkan arus mengalir hanya dalam satu arah. Pada gambar dioda pada rangkaian listrik, segitiga melambangkan panah yang menunjukkan arah ini. Jika kita meletakkan dioda antara setiap output mikrokontroler dan konduktor dari kolom matriks yang sesuai, maka kita akan mencapai tujuan kita - sekarang arus hanya dapat mengalir ke output, karena konduktor ini mencapai setiap tombol kolomnya. Ternyatabahwa dari output diatur ke "1", arus tidak akan mengalir ke mana pun, dan ini hampir mengubahnya menjadi output saluran terbuka. Tentu saja, ia tidak mencapai OS yang sebenarnya, tetapi itu memecahkan masalah kita dari rangkaian arus tertutup dalam matriks keyboard. Kembali ke gambar kedua dari belakang matriks, tapi kali inipertimbangkan dioda hijau untuk memahami cara kerja trik ini.

Secara alami, masuk akal untuk meminimalkan jumlah dioda. Untuk melakukan ini, Anda bisa mengurangi jumlah kolom dengan menambah jumlah baris. Dan jika hasil yang dihasilkan tidak cocok dengan tata letak keyboard yang sebenarnya, maka Anda dapat "memutar" matriks 90 ° (tukar baris dengan kolom). Kemungkinannya tidak terbatas. Tetapi saat ini, sejumlah besar mikrokontroler telah muncul yang mudah digunakan dan nyaman untuk hobi, jadi hari ini teknik yang dijelaskan secara praktis tidak digunakan dalam proyek keyboard lokal. Untunglah

Klik hantu (Ghosting)


Jika Anda tertarik pada clavs, maka Anda harus sudah memenuhi persyaratan ini. Sayangnya, dalam dunia keyboard sering ditafsirkan secara salah.

Kita sudah terbiasa dengan situasi ketika penekanan simultan dari beberapa tombol yang terletak pada baris yang sama dapat mengganggu pembacaan normal matriks. Dan masalah ini, dapat kita katakan, telah dipecahkan oleh kita. Sekarang mari kita lihat apa yang terjadi jika Anda mengklik beberapa tombol secara bersamaan di baris yang sama dan di kolom yang sama.


Contoh penekanan hantu

Pada gambar, tiga tombol ditekan secara bersamaan. Dua di antaranya ada di kolom "C2", dan dua di baris "Rm". Ini berarti bahwa salah satu tombol yang ditekan berbagi baris dengan tombol yang lain ditekan, dan kolom dengan tombol ketiga ditekan. Dalam situasi inilah phantom pressing terjadi. Bayangkan kita sedang menginterogasi kolom "C1" (yaitu, ditekan ke tanah - itu dalam keadaan "0"). Akor karakteristik tombol yang ditekan ini mengarah ke yang berikut: meskipun tombol kiri atas tidak ditekan, baris "R2" berada dalam status "0", karena ditekan ke tanah oleh kolom "C1" (terletak di "0") melalui tiga tombol ditekan. Akibatnya, pengontrol keyboard membaca tombol kiri atas sebagai "ditekan", terlepas dari apakah itu benar-benar ditekan atau tidak. Situasi yang dideskripsikan disebut phantom pressing ( ghosting ), karena beberapa kombinasi tombol yang ditekan secara bersamaan menyebabkan respons phantom dari tombol lain (ghost penekanan tombol), walaupun secara fisik tombol-tombol lain ini tidak ditekan.

Tentu saja, ada cara untuk melindungi huruf dan gamer dari respons hantu, dan metode ini banyak digunakan di keyboard komputer modern. Anda dapat menangkap momen terjadinya phantom menekan dan memblokirnya. Orang biasa tidak dapat secara bersamaan menekan atau melepaskan dua tombol dengan akurasi sempurna. Oleh karena itu, pemindaian matriks cukup cepat, kita dapat mengasumsikan bahwa antara dua melewati matriks tidak lebih dari satu tombol dapat mengubah keadaannya. Dalam hal ini, pengontrol menerima penekanan tunggal dan memantau terjadinya situasi ketika dua tombol atau lebih ditekan di antara celah matriks. Mengingat bahwa pemindaian matriks terjadi pada kecepatan di mana kemunculan biasa dari situasi seperti itu sangat tidak mungkin, kita dapat menyimpulkan bahwa salah satu tombol yang baru saja ditekan adalah hantu.Oleh karena itu, pengontrol harus mengabaikan semua klik ini. Selain itu, lebih aman untuk tidak segera memberi tahu komputer tentang perubahan status keyboard - pada awalnya masuk akal untuk menunggu sampai semua operasi ini hilang.

Ada pendekatan lain. Anda dapat mengidentifikasi situasi ketika tombol "ketiga" dipicu, dan memblokir pers ini dan semua yang berikutnya. Jangan lepaskan kunci sampai respons hantu hilang dan situasi menjadi normal kembali. Untuk menerapkan pendekatan ini, program harus mengingat tombol mana yang saat ini ditekan (dan biasanya ia mengingatnya dengan cara ini) untuk menolak operasi tombol berikutnya, di baris dan kolom yang klik simultannya sudah direkam. Jika Anda menulis program dengan bijak, hanya respons bermasalah yang akan diblokir, dan semua tanggapan selanjutnya akan diterima seperti biasa - kecuali untuk mereka yang melanggar aturan lagi. Setelah pengontrol menolak menekan setiap tombol yang sudah memiliki operasi simultan di baris dan kolomnya, ternyata tergantung pada status beberapa tombol,yang lain mungkin tidak terdaftar sama sekali. Situasi ini umumnya dikenal sebagaiblocking ( jamming ). Artinya, tombol yang mencegah operasi simultan dari tombol lain, ternyata, "memblokir" bagian dari keyboard.

Dari sudut pandang pengguna, dimungkinkan untuk secara bersamaan menekan semua tombol dari satu kolom (tanpa menekan tombol dari yang lain), tetapi secara bersamaan tekan semua tombol dari satu baris hanya jika masing-masing tombol tidak memiliki lebih dari satu operasi di kolom. Hal yang sama berlaku untuk menekan tombol dari satu kolom - pemicu tambahan dicatat hanya jika tombol berada di baris yang “tidak sibuk”.

Orang sering mengacaukan “ pemicu hantu ” dan “ pemicu pemicu ” (“ ghosting ” dan “jamming "), yang merupakan misteri bagi saya pribadi - menurut saya, istilah ini cukup intuitif.

Di keyboard menggunakan matriks seperti yang baru saja kita periksa, respons hantu atau pemblokiran tidak dapat dihindari. Karena respons hantu dalam pekerjaan sehari-hari tidak dapat diterima, untuk melawannya, hampir semua produsen keyboard karet menggunakan berbagai trik, dan pemblokiran ikut berperan. Pertanyaan: bagaimana cara membuat matriks sedemikian rupa sehingga pemblokiran terjadi sesering mungkin dan tidak disebabkan oleh kombinasi keyboard yang umum? Sebenarnya, ini adalah topik yang bagus untuk keseluruhan buku; itu sebabnya matriks keyboard barang-barang konsumen sangat membingungkan dan selalu menghalangi suasana hati yang baik (seperti permainan kata-kata).

Dioda untuk semua tombol - solusi utama


Jika Anda melihat kembali gambar tentang klik hantu, Anda dapat melihat bahwa tombol kanan bawah yang harus disalahkan.
Tetapi tombol ini adalah satu-satunya yang melaluinya arus dalam situasi ini mengalir "naik". Jadi, jika kita tidak ingin arus "naik" saat ini mencegah kita membaca matriks secara normal, maka mari kita kenalkan dioda sehingga arus dapat mengalir melalui kolom secara ketat dari atas ke bawah, mengalir ke output mikrokontroler.

Sayangnya, menabung tidak dimungkinkan di sini - Anda harus meletakkan dioda pada setiap tombol. Jika kita berbicara tentang polaritas, maka Anda seharusnya tahu bahwa dalam kasus khusus ini, dioda harus melewati arus "dari atas ke bawah", yaitu, katoda mereka ("panah") harus melihat output dari mikrokontroler (kolom), sedangkan anoda harus ditujukan ke input (jalur).


Matriks ringkasan

Tidak masalah sisi tombol mana dioda berada; yang utama adalah mengamati polaritas yang benar. Ingatlah bahwa dalam hal ini, arus akan selalu mengalir dari input ke output. By the way, jika input ditarik ke daya, dan output dalam mode OS, maka ini akan selalu terjadi.

Dengan pendekatan ini, ternyata arus akan selalu mengalir “ke bawah”, dan ini menghilangkan tampilan loop arus tertutup ketika beberapa tombol ditekan secara bersamaan. Selain itu, desain ini adalah satu-satunya yang dapat menyediakan keyboard dengan NKRO penuh. Selain itu, perlu disebutkan (walaupun ini tampak jelas) bahwa masalah output mikrokontroler yang tidak memiliki mode OS sekarang diselesaikan secara otomatis. Dioda yang dipasang secara berurutan dengan masing-masing tombol menyimpan output dari suatu rangkaian tidak lebih buruk dari opsi yang sebelumnya dipertimbangkan, di mana ia seharusnya juga menambahkan dioda pada setiap kolom.

Rollover


Ya, saya tahu teksnya sudah terlalu panjang. Tetapi saya masih menambahkan bab terakhir ini, karena, menurut saya, tanpa itu artikelnya tidak akan lengkap. Jadi, rollover adalah kemampuan keyboard untuk mengambil beberapa ketukan sekaligus.

xKRO


KRO adalah kunci rollover ( key rollover ), dan biasanya singkatan ini berhak oleh beberapa nomor. Misalnya, 2KRO berarti rollover dua tombol. Sebuah keyboard memiliki rollover x- key jika dan hanya jika itu mampu mendaftarkan x penekanan tombol simultan, apalagi, terlepas dari tombol dan urutan yang digunakan. Kebanyakan kubah karet modern memiliki 2KRO. Namun, tidak mengikuti dari ini bahwa jumlah penekanan tombol yang diijinkan pada keyboard ini akan selalu terbatas pada x . Sebenarnya, ini berarti dukungan x- click dijamin tepat.

Bergantung pada desain matriks dan jenis pengontrol, dua keyboard 2KRO dari produsen yang berbeda dapat berperilaku sangat berbeda. Yang satu hanya selalu dapat menerima dua klik secara bersamaan, dan yang lainnya dapat dengan mudah mencerna lebih banyak lagi. Tampaknya keyboard terakhir diumumkan oleh 2KRO karena beberapa kombinasi tombol (kemungkinan besar tidak mungkin) masih akan menyebabkannya memblokir menekan tombol lain. Dan karena ini berarti bahwa ketika bekerja dengan keyboard ini kombinasi tertentu dari tiga tombol dan lebih tidak akan berfungsi, perusahaan mengumumkannya 2KRO.

Nkro


Istilah NKRO berarti rollover N-key , dan digunakan untuk menunjuk keyboard yang mendukung, terlepas dari semuanya, kombinasi dari tombol yang ditekan secara bersamaan. Tetapi perlu diingat bahwa matriks NKRO dan keyboard NKRO adalah dua perbedaan besar. Misalnya, jika implementasi akhir dari matriks, yang kami periksa dalam artikel, mendukung NKRO (dengan mempertimbangkan firmware yang ditulis dengan benar), maka ini sama sekali tidak berarti bahwa keyboard yang menggunakan matriks ini juga akan mendukung NKRO. Ini mungkin disebabkan oleh pembatasan yang diberlakukan oleh port komunikasi yang terhubung dengan keyboard; alasan lain bisa menjadi penghematan produsen, selalu menabung di sana-sini. Saya akan mencoba menjelaskan masalah NKRO saat menghubungkan ke PS / 2 dan USB di bagian berikut.

Ringkasan


Tentu saja, lembar keluar dengan cukup baik, tetapi konsepnya tidak begitu sederhana - terutama bagi pembaca, yang bukan seorang insinyur elektronik. Saya harap saya bisa menjelaskan semuanya; Meskipun demikian, saya mencoba menulis sejelas mungkin. Karenanya, bagi sebagian dari Anda, artikel itu mungkin terasa agak membosankan. Nah, jika Anda meraba-raba dalam elektronik, maka kemungkinan besar Anda seharusnya tidak membacanya sama sekali;)
Dalam hal apa pun, tolong beri tahu saya jika artikel itu ternyata bermanfaat bagi Anda dan apakah layak untuk membuat sekuel. Jika demikian, maka saya akan duduk untuk "seri" berikutnya.

Michał Trybus
2 September 2013

Source: https://habr.com/ru/post/id394585/


All Articles