Bagaimana 16 tombol dapat dihubungkan dengan hanya 8 kabel?

9

Ini produknya. Saya mengerti idenya: 16 tombol ini menggunakan matriks 4x4. 4 baris untuk baris, 4 baris untuk kolom, dan kami memiliki 8 kabel.

masukkan deskripsi gambar di sini

Tapi:

  1. Bagaimana ini bisa bekerja tanpa multiplexer?

  2. Bisakah ini mendeteksi secara akurat penekanan beberapa tombol? Bahkan jika tombol menggunakan baris atau kolom yang sama? Contoh: tombol pada posisi (2,2) (2,3), (3,2), dan (3,3) ditekan secara bersamaan.

  3. Bagaimana cara kerjanya?

Basj
sumber
7
Ini adalah pengetahuan umum karena Anda akan menemukan pencarian Google dengan 'keypad multiplexing' atau sejenisnya. Apakah Anda tidak mencobanya terlebih dahulu, sebelum memposting ini?
TonyM
3
@TonyM Tentu saja saya lakukan, banyak pencarian, dan saya bahkan memesan beberapa chip multiplexer 74HC164 yang tiba di rumah beberapa hari yang lalu. Saya baru akan mengirim semuanya dengan chip multiplexer ini ketika saya menemukan ini. Lalu saya bertanya-tanya "bagaimana ini bisa bekerja tanpa multiplexer"?
Basj
1
Perangkat di sebelah kiri harus memiliki kode multiplexing di dalamnya
Marcelo Espinoza Vargas
3
@TonyM Terima kasih telah menunjukkan ini pada saya. Bisakah Anda menautkan PDF alih-alih membuat misteri;)? Mungkin saya mencari dengan kata kunci selain keypad, dll. Dan saya mungkin tidak menemukan yang sama.
Basj
1
@ Basj: memiliki beberapa mesin cetak tidak menjadi masalah. Anda memindai keempat garis satu demi satu. Jika tombol ditemukan ditekan pada baris 1, Anda perhatikan. Ketika datang ke saluran 3, Anda menemukan tombol lain ditekan di sana, Anda perhatikan juga. Pada akhirnya, Anda mendapatkan kedua tombol. Selama Anda dapat memindai secara signifikan lebih cepat daripada orang dapat menekan tombol, Anda tidak akan melewatkannya.
Gábor

Jawaban:

24
Bagaimana ini bisa bekerja tanpa multiplexer?

Tidak. Papan tombol tampaknya hanya memiliki saklar, dengan beberapa dioda mungkin tidak dapat kita lihat. Namun, papan kiri sepertinya memiliki prosesor di atasnya. Hampir pasti, multiplexing sedang dilakukan dalam firmware.

Algoritma multiplexing bekerja seperti ini:

  1. Drive satu baris tinggi, yang lain rendah.

  2. Aktifkan pulldown pasif pada baris kolom.

  3. Lihat garis kolom mana yang tinggi. Tombol-tombol di persimpangan garis-garis kolom dengan satu baris baris yang ditekan ditekan. Tombol-tombol lain pada baris itu dilepaskan.

  4. Ulangi kembali ke langkah pertama, dengan menegaskan baris berikutnya secara berurutan.

Proses di atas diulang cukup cepat sehingga semua tombol diperiksa dalam waktu yang masih terasa instan bagi pengamat manusia. Batas manusia "sesaat" dalam konteks ini adalah sekitar 50 ms. Bahkan mikrokontroler low-end dapat memindai keypad 4x4 dalam waktu yang jauh lebih sedikit dari itu.

Bisakah ini mendeteksi secara akurat penekanan beberapa tombol?

Mungkin iya. Salah satu caranya adalah dengan meletakkan dioda secara seri dengan masing-masing tombol. Itu bisa berada di sisi bawah papan yang Anda perlihatkan. Dengan dioda, algoritma yang dijelaskan di atas hanya berfungsi.

Cara lain adalah dengan meletakkan resistor secara seri dengan garis dan mengukur tegangan analognya. Bahkan dengan beberapa tombol memendekkan beberapa baris / kolom secara bersamaan, Anda akhirnya dapat mengetahui tombol mana yang ditekan. Ini membutuhkan input A / D dalam mikro, bukan hanya input digital seperti ketika dioda digunakan.

Olin Lathrop
sumber
1
Terima kasih. Bagaimana dengan beberapa penekanan sekaligus? Catatan: papan kiri adalah RaspberryPi.
Basj
1
@Hayman kenapa begitu? Bisakah Anda memberi contoh? Mengapa (1,2), (2,2), dan (3,3) ditekan pada saat yang sama menjadi masalah ketika tidak ada dioda? Mungkin Anda memiliki skema kecil? Karena poin ini sangat penting, mungkin layak untuk jawaban khusus @Hayman?
Basj
8
+1 untuk "papan kiri sepertinya memiliki prosesor di atasnya". Senang itu.
Enric Blanco
3
@ Basj sudah jelas jika Anda bermain dengannya. Setiap kali Anda menekan tombol, Anda menghubungkan baris ke kolom. Setiap kali baris dan kolom terhubung, tombol di persimpangan mendaftar sebagai ditekan. Tetapi jika setidaknya 3 tombol ditekan, satu baris dan satu kolom dapat dihubungkan secara tidak langsung .
hobbs
2
@ Basj Lihat gambar ini . Garis merah menunjukkan logika level tinggi. Jika Anda menahan 3 tombol yang ditunjukkan dengan 'x' Anda dapat melacaknya dan melihat jalur di mana sinyal akan mengalir. Baris pertama 1 dipilih dan disetel tinggi, dengan menekan tombol 1,1 ini membuat kolom pertama tinggi. Dengan menekan tombol 1,2 kita sekarang telah membuat baris 2 tinggi. Sekarang jika kita menekan tombol lain pada baris 2 kita akan membuat kolom lain tinggi. Masalah dengan ini adalah μC bodoh, ia tahu itu menetapkan baris 1 tinggi dan terlihat tinggi pada kolom 3, oleh karena itu ia menganggap tombol 1,3 tinggi
Doodle
9

Tanpa dioda ... Anda akan mendapatkan persegi panjang hantu.

Misalnya dalam contoh Anda (2,2) (2,3), (3,2), dan (3,3); Anda memilih contoh ironis dengan memilih persegi panjang. Jika Anda benar-benar menekan keempatnya, itu akan berhasil. Tetapi jika Anda menekan tiga sudut persegi panjang, sudut keempat juga akan tampak ditekan, meskipun tidak.

Keypad itu jelas dimaksudkan untuk entri data keyboard, di mana konvensi pengguna adalah penekanan tombol satu per satu. Anda perhatikan tidak ada tombol "shift" pada keypad entri kartu kredit pompa bensin, misalnya.

Namun, jika Anda membuat S1 sebagai tombol shift, dan S3 sebagai tombol alt-shift sehingga pengguna mungkin bisa menahan keduanya sekaligus menekan S13, maka S15 juga akan tampak ditekan.

Harper - Pasang kembali Monica
sumber
1
Memang, sebagian besar keyboard entri data tidak dimaksudkan untuk menekan lebih dari 2 tombol sekaligus, sehingga tidak ada masalah. Keyboard musik adalah cerita lain, karena banyak tombol dapat ditekan sekaligus. Sebagian besar dari mereka memiliki dioda atau kabel independen untuk setiap tombol. Tapi saya memang menemukan satu keyboard musik di toko bekas (harga 9 euro) yang tidak memiliki adaptasi yang sesuai untuk beberapa tombol ditekan sekaligus, dengan hasil yang tidak terduga dan menyebalkan!
Level River St
Keywitch dapat berupa tipe yang memiliki dioda bawaan, atau mungkin ada dioda yang tersembunyi di bawahnya.
rackandboneman
1

Berikut cara melakukannya tanpa pemindaian berkelanjutan:

  • Atur semua driver ke tinggi
  • Aktifkan pulldown pasif pada saluran penerima
  • Setel interupsi penggantian pin untuk mendeteksi salah satu garis menjadi tinggi (atau mengubah level)
  • Ketika ini terjadi, aktifkan pemindaian keypad, ucapkan setiap 10 ms
  • Memindai secara normal dan memproses penekanan tombol
  • Setelah waktu habis tanpa kejadian, hentikan pemindaian dan mulai kembali pada poin pertama
peufeu
sumber
0

Saya telah melakukan ini dengan Bahasa Majelis pada mikrokontroler AVR Atmel telanjang.
Untuk kesederhanaan: Baris Keypad: gunakan Pin Arduino 4,5,6 dan 7 (pin AVR PD4, PD5, PD6, dan PD7) Kolom keypad: gunakan Pin Arduino 8, 9, 10 dan 11 (pin AVR PB0, PB1, PB2 dan PB3 ) Buat input pin Baris dengan pull-up diaktifkan. Buat pin Kolom Output dan output nol untuk mereka. Aktifkan Pin Change Interrupts pada semua pin baris dan kolom. http://playground.arduino.cc/Main/PinChangeInterrupt Menekan tombol pada keypad akan menarik pin Row rendah. Rutin interupsi perlu membaca pin baris dan menemukan pin yang rendah. 4 bit atas harus tiga dan satu nol. Jika Anda menggunakan variabel uint8_t 8 bit, Anda dapat membaginya dengan 16 atau (var >> 4) untuk meletakkan 4 bit di bit yang lebih rendah dari angka tersebut. Anda dapat menggunakan bitwise OR | operasi dengan 240 untuk mengatur 4 bit bagian atas menjadi 1s dan operasi bitwise NOT ~ untuk membalikkan semua bit sehingga Anda hanya memiliki satu bit yang mewakili baris penekanan tombol. Simpan nomor ini sebagai 0, 1, 2 atau 3.
Ganti konfigurasi pin:
Buat input pin Kolom dengan pull-up diaktifkan. Buat pin Row Output dan output nol kepada mereka. Baca pin kolom dan temukan pin yang rendah. Lakukan manipulasi yang sama dengan nilai ini kecuali Anda tidak harus menggeser angka ke kanan. Setelah var ^ 240 dan ^ var Anda memiliki satu bit untuk mewakili kolom tekan tombol aktif. Ingatlah untuk menonaktifkan interupsi sebelum mengkonfigurasi ulang port karena kemungkinan akan memicu interupsi yang tidak diinginkan. Anda mungkin harus menghapus tanda interupsi ketika meninggalkan rutin interupsi untuk mencegah penanganan interupsi duplikat.

Darrell Harriman
sumber