Apa perbedaan antara INPUT dan INPUT_PULLUP?

24

Pada Arduinos yang lebih baru, salah satu dapat mengatur pinMode ke salah satu dari tiga negara: OUTPUT, INPUT, dan INPUT_PULLUP.

Halaman ini mengatakan:

Chip Atmega pada Arduino memiliki resistor pull-up internal (resistor yang terhubung ke daya secara internal) yang dapat Anda akses. Jika Anda lebih suka menggunakan ini daripada resistor pull-down eksternal, Anda bisa menggunakan argumen INPUT_PULLUP di pinMode (). Ini secara efektif membalikkan perilaku, di mana TINGGI berarti sensor mati, dan RENDAH berarti sensor menyala.

Saya agak yakin bahwa membalikkan perilaku bukanlah satu-satunya hal yang dilakukannya.

Apa yang INPUT_PULLUPharus dilakukan Apa yang membuatnya berbeda dari INPUT, dan bagaimana cara memutuskan mana yang akan digunakan?

Manishearth
sumber
INPUT_PULLUP ditambahkan dengan IDE 1.0.1. Tidak relevan papan Arduino yang Anda gunakan, semuanya mendukung PULLUP.
baldengineer

Jawaban:

23

Standarnya adalah INPUTyang mengatur pin sebagai INPUT. Jika pin benar-benar terputus, itu akan secara acak membaca HIGHdan LOW. Jika Anda mengikatnya ke + 5V atau 0V, itu pasti akan membaca HIGHatau LOW.

Internal Arduino adalah resistor pullup dengan nilai sekitar 50k-ohm. Resistor ini dapat dihubungkan secara opsional menggunakan internal INPUT_PULLUP. Ini secara fungsional (dan elektrik) setara dengan menghubungkan resistor 50k-ohm antara pin dan + 5V, satu-satunya perbedaan adalah bahwa itu tidak memerlukan komponen eksternal dan Anda dapat menghidupkan dan mematikannya dalam perangkat lunak selama pelaksanaan program Anda.

Jadi mengapa pull-up dan bukan pull-down? Mungkin ada beberapa alasan untuk itu, tetapi ketika kabel tombol atau switch atau apa pun yang "biasanya terbuka", Anda hanya perlu mengikatnya ke tanah, Anda tidak perlu menjalankan + 5V ke sana. Karena sebagian besar papan akan dirancang dengan tuangkan tanah yang besar untuk alasan melindungi, mengikat ke tanah adalah alasan praktis.

Beberapa IC lebih berfitur seperti chip ARM memiliki kedua pull up dan pull down, tetapi garis AVR 8-bit hanya dilengkapi dengan pull-up. Anda hanya perlu mengingat bahwa HIGHitu "terbuka" dan LOW"tertutup".


sumber
Suara positif. FYI, menurut dokumentasi, internal pull-up adalah 20K, bukan berarti ada banyak perbedaan dari 50K. arduino.cc/en/Tutorial/DigitalPins
SDsolar
9

Perhatikan bahwa sebelum ke 1.0.1, Anda dapat mengaktifkan pullup dengan menggunakan digitalWrite(). Dan kamu masih bisa.

Kode:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Ini adalah perbedaan penting karena INPUT_PULLUPjelas menyalakan resistor pull-up. Namun, yang kurang jelas, adalah bahwa dimulai dengan 1.0.1, hanya dengan memanggil INPUTmemaksa pull-up dimatikan. (Sebelumnya, status pull-up tetap sama).

Untuk melihat bagaimana pin beroperasi dengan dan tanpa pull-up, tonton video berikut.

Pin mengambang pada osiloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM

Dengan Pull-Up diaktifkan: http://www.youtube.com/watch?v=SAIw7LLVl-U

Video tutorial lengkap tentang Pull-Ups (perhatikan bahwa saya membuat ini sebelum INPUT_PULLUP ditambahkan ke perpustakaan Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo

baldengineer
sumber
Sangat pintar. Terima kasih telah menulis ini. Suara positif.
SDsolar