Saya baru-baru ini membaca sebuah artikel tentang pelepasan tombol dan bertanya-tanya apakah saya harus mengingatnya ketika bekerja dengan, misalnya, sebuah Arduino (ATMega mC)? Saya menganggap itu adalah masalah, terutama ketika bekerja dengan interupsi.
Jadi apakah lebih baik mendeteksi bouncing dalam kode, atau haruskah ini dirawat dengan perangkat keras? Tolong jelaskan.
Jawaban:
Saya akan sangat menyarankan mengaitkan lingkup (mudah-mudahan Anda memiliki satu atau dapat menggunakan satu untuk digunakan) hingga saklar Anda. Saya telah melihat proyek siswa yang memiliki bouncing pada saklar mereka yang pergi dari 5V ke -5V ke 4V ke -3V kemudian ke 2V kemudian kembali ke 0V. Ketika kami melihat undian saat ini pada ruang lingkup ada beberapa lonjakan yang sangat besar.
Dalam kasusnya yang khusus, sangat diperlukan baginya untuk menghapus sakelar perangkat kerasnya.
Namun, di sisi lain, saya telah melihat switch yang memiliki efek jauh lebih kecil yang dapat dengan mudah dihapus dalam perangkat lunak.
Anda perlu mempertimbangkan pilihan Anda. Jika Anda memiliki jumlah firmware yang sangat kompleks, menambahkan overhead pada Anda sebagai programmer dan penggunaan cpu mungkin tidak sepadan dan Anda akan lebih baik hanya menambahkan sedikit perangkat keras. Sekarang di sisi lain, jika Anda mencoba untuk mendapatkan biaya dan ukuran turun, Anda akan ingin menghapus perangkat keras sebanyak mungkin dan melakukan semuanya dalam firmware jika Anda bisa.
sumber
Jika Anda seorang perancang elektronik profesional kemungkinan bos Anda tidak akan membiarkan Anda melakukannya dalam perangkat keras. Alasannya sederhana: jika kumpulan produksi Anda adalah perangkat lunak yang cukup besar sebenarnya gratis , sedangkan perangkat keras harus dibayar untuk setiap unit yang Anda hasilkan. Dan sementara resistor dan kapasitor sangat murah, memasangnya pada PCB mungkin berharga hingga 20 kali lipat dari harga pembelian mereka.
Apakah Anda melakukan debounce pada perangkat lunak atau perangkat keras, Anda masih harus memilih tombol kualitas. Tombol 157ms yang terkenal dari artikel sama sekali tidak cocok untuk aplikasi apa pun .
Saya biasanya mencicipi tombol pada interval 32ms , yang cukup untuk menjembatani waktu debounce dari tombol yang bagus. Saya penggemar berat Alps Switch SKQG TACT.
Pada beberapa perangkat yang saya uji memiliki waktu pentalan awal kurang dari 10ns. Sementara itu memiliki masa operasi 100 000 siklus, kami mengujinya untuk 200 000 siklus dan bahkan kemudian 32ms debounce sudah cukup. (Saya kira saya seharusnya mengukur tingkat debounce yang sebenarnya, tetapi minat utama kami pada saat itu adalah perilaku produk akhir. Bagaimanapun, kami menggunakannya di luar spesifikasi.)
Jika Anda benar-benar menginginkan solusi perangkat keras, saya berikan solusi SR flip-flop yang disebutkan dalam artikel sebagai solusi terbaik secara teknis:
Flip-flop dapat dibangun dengan gerbang NAND ganda , yang tersedia dalam paket VSSOP8 kecil, misalnya. Kelemahan utama dari solusi ini adalah Anda memerlukan tombol tekan SPDT, di mana SPST jauh lebih umum tersedia.
sumber
Ada banyak (dan banyak) cara berbeda untuk melonggarkan tombol. Apakah Anda melakukannya dalam perangkat lunak atau perangkat keras akan tergantung pada persyaratan proyek Anda dan jenis switch.
Berikut ini beberapa tautan ke berbagai metode:
http://www.ganssle.com/debouncing.htm
http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/
sumber
Artikel itu adalah "alkitab" tentang debouncing. Kontak bouncing dapat menjadi masalah dengan aplikasi apa pun.
Umumnya lebih baik untuk mendebokan sakelar dalam perangkat lunak karena lebih mudah untuk menyesuaikan penundaan untuk sakelar tertentu, karena sakelar-sakelar kontak mereka berbeda. Debouncing rilis kunci juga sering diperlukan. Switch produsen sering menentukan jumlah bouncing untuk produk mereka, biasanya sekitar 10 ms - 20 ms.
sumber
Beralih bouncing dapat berlangsung selama puluhan milidetik. Jika Anda mengambil jajak pendapat dari rutinitas interupsi yang berjalan pada penghitung waktu, bouncing tidak akan menjadi masalah, karena bahkan jika Anda melakukan polling switch di tengah-tengah badai bouncing, Anda langsung mendapatkan status baru segera , atau paling buruk mendapatkan status lama, dan tidak melihat status baru hingga jajak pendapat berbasis waktu berikutnya. Polling dari ISR berjangka waktu seperti ini merupakan bentuk pelepasan perangkat lunak.
Namun, jika Anda menggunakan sakelar itu untuk menyebabkan interupsi, dan Anda mengharapkan rutin layanan interupsi itu berjalan dengan cepat, dalam waktu kurang dari 10 milidetik, Anda akan memerlukan pelepasan perangkat keras, jika tidak satu peristiwa sakelar dapat menghasilkan jumlah acak yang agak acak. menyela, dan tentu saja seringkali lebih dari yang diharapkan. Di sisi lain, jika rutin interupsi berjalan cukup lama, bouncing switch akan menetap sebelum ISR selesai, dan Anda akan baik-baik saja, tetapi kebanyakan ISR yang dibangun dengan baik tidak membutuhkan waktu terlalu lama.
sumber
Cara terbaik untuk melakukan apa pun adalah cara yang paling cocok untuk Anda. Tetapi ketika Anda sudah memiliki mikrokontroler Anda dapat melakukan debounce pada perangkat lunak hanya dengan biaya beberapa upaya kode.
Cara terpenting untuk melonggarkan perangkat lunak adalah dengan memeriksa tombol pada saat-saat yang lebih jauh daripada waktu bouncing terpanjang. 50 ms tampaknya merupakan batas atas pada waktu pentalan sakelar 'normal', jadi ketika Anda dapat mengatur perangkat lunak Anda seperti ini, Anda berada di tempat yang jelas:
sumber
Salah satu pendekatan untuk melonggarkan yang belum disebutkan adalah dengan menggunakan saklar lemparan ganda dengan satu lemparan terikat ke VDD dan yang lainnya ke ground. Masukkan itu ke dalam pin yang (baik melalui perangkat lunak atau perangkat keras) akan ditarik dengan lemah ke kondisi saat ini. Pendekatan semacam itu akan memberikan keuntungan dari saklar lemparan ganda, tetapi hanya akan membutuhkan satu pin I / O daripada dua.
sumber