Masalah ini sudah berusia puluhan tahun tetapi saya tidak melihat jawaban langsung untuk itu di situs ini. Saya ingin yang berikut ini:
Sirkuit ini hanya memungkinkan untuk memeriksa keadaan tombol dari dalam mikrokontroler. Tidak ada yang mewah. Pertanyaan saya:
- Adakah yang lebih baik dari desain sederhana ini?
- Apakah nilai resistor 100 kilo ohm memadai untuk perangkat CMOS kita sekarang, seperti dsPIC30FXXXX dan bukan aplikasi daya tinggi?
Jawaban:
Pertama, banyak mikrokontroler dan pengontrol sinyal digital akan memiliki resistor penarik internal. Berikut ini contohnya, Atmel ATMega164.
Biasanya akan ada register yang memungkinkan pull-up internal dinyalakan dan dimatikan. Karena variasi dalam proses fabrikasi, pullup internal ini datang dalam rentang yang sangat luas, dan bukan pilihan yang baik jika Anda memerlukan kontrol yang sangat dekat atas penarikan arus dalam aplikasi daya ultra rendah. Jika menjaga jumlah komponen rendah adalah penting, ini adalah cara mudah untuk melakukannya. Menggunakan internal pull up untuk debounce perangkat keras bukan ide yang baik, karena tidak mungkin untuk memperkirakan nilai tepatnya.
Apakah 100kΩ nilai memadai tergantung. Jika itu hanya sebuah saklar yang akan dibalik secara berkala oleh pengguna, maka 100kΩ akan menjadi pilihan yang baik untuk meminimalkan konsumsi daya. Untuk hal-hal yang akan beralih lebih cepat, seperti rotary encoders, proses yang akan saya lalui adalah
Jadi jika arus sink maksimum per pin GPIO adalah 10 mA dan beroperasi pada 5V:R=VI=5V10mA=500Ω . Menjaga nilai R ini sekecil mungkin akan memungkinkan tepi paling tajam dan frekuensi switching tertinggi.
sumber
Anda bisa menjadi lebih simpel dari itu.
Cukup gunakan resistor pull-up / pull-down internal di mikrokontroler Anda.
100k memadai, tetapi pullup internal bisa sedikit lebih rendah di beberapa MCU, misalnya dalam AVR atmega8 adalah 30-80kOhm untuk reset pull-up dan 20-50kOhm untuk semua pin I / O lainnya.
sumber
Lebih baik tidak bisa dijawab tanpa kriteria khusus untuk mengukur, yang belum Anda berikan. Dalam kebanyakan kasus, topologi yang Anda tampilkan baik-baik saja. Dua variasi mungkin "lebih baik" tergantung situasi:
Banyak mikrokontroler memiliki tarikan internal pada beberapa pin mereka. Ini dimaksudkan untuk situasi seperti ini. Resistor kemudian internal ke mikro dan Anda mengatur sedikit tempat untuk mengaktifkannya. Satu-satunya bagian eksternal yang diperlukan adalah tombol tekan itu sendiri.
Varian lain yang berguna untuk diingat adalah untuk desain berdaya rendah di mana tombolnya mungkin sebuah saklar yang dapat ditutup untuk jangka waktu yang lama. Dalam hal ini Anda ingin meminimalkan arus rata-rata jangka panjang melalui resistor pullup. Anda membuatnya sebesar mungkin, tetapi ada batasan untuk itu dan kelemahan untuk membuatnya terlalu besar. Sebagai gantinya, Anda mengaktifkan pullup hanya untuk beberapa μs sekaligus untuk membaca tombol. Jika Anda memeriksa tombol setiap 1 ms dan pullup aktif selama 10 μs, maka rata-rata pullup saat ini berkurang 100x. Dengan resistor eksternal Anda menggunakan pin lain untuk menggerakkan sisi atas pullup. Dengan penarikan internal, Anda mengaktifkan / menonaktifkannya di firmware sesuai kebutuhan.
Saya sudah menjawab panjang lebar di sini .
sumber
Lebih baik dari desain sederhana itu? Iya. Lempar tutupnya dan Anda memiliki sakelar deboelled perangkat keras sederhana.
Kapasitor akan menjadi tutup keramik 0,1 uF yang umum. Resistor akan menjadi 10k. Situs ini memiliki perincian lengkap tentang alasannya. Singkatnya, sirkuit debounce mencegah mikrokontroler dari kesalahan mencatat beberapa penekanan ketika Anda menekan tombol. Pengaturan Resistor / Kapasitor memuluskan mekanis memantul tombol sehingga transisi yang mantap.
sumber
EDIT - komentar yang saya buat di bawah ini dimaksudkan untuk menindaklanjuti apa yang dikatakan Olin kemudian tentang sirkuit dengan kapasitor untuk menambahkan debounce. Maaf sepertinya muncul di tempat yang salah - mungkin seseorang dapat memperbaikinya karena saya jelas terlalu buta atau bodoh untuk melihat bagaimana saya seharusnya melakukannya !!
Saya setuju dengan Olin - tidak memberikan pembatalan yang baik. Saya juga akan menambahkan bahwa korslet kapasitor dapat menyebabkan gelombang besar arus yang dapat mengatur ulang mikroprosesor jika tata letak PCB tidak benar-benar baik. Beberapa sakelar memerlukan arus pembasahan untuk beroperasi dengan benar dan andal dan 100k mungkin terlalu tinggi untuk beberapa sakelar (terutama sakelar membran).
sumber