INPUT ve INPUT_PULLUP arasındaki fark nedir?


24

Yeni Arduinos günü, biri üç durumdan birine pinMode ayarlayabilirsiniz: OUTPUT, INPUT, ve INPUT_PULLUP.

Bu sayfa diyor ki:

Arduino'daki Atmega yongasında erişebileceğiniz dahili çekme dirençleri (dahili olarak güç sağlayan dirençler) vardır. Bunları harici açılır dirençler yerine kullanmayı tercih ediyorsanız, pinMode () içindeki INPUT_PULLUP değişkenini kullanabilirsiniz. Bu, HIGH'ın sensörün kapalı olduğu ve DÜŞÜK sensörün açık olduğu anlamına gelen davranışı tersine çevirir.

Ancak davranışını tersine çevirmenin yaptığı tek şey olmadığından eminim.

Ne yapar INPUT_PULLUP? Bundan farklı kılan nedir INPUTve hangisinin kullanılacağına nasıl karar verilir?


INPUT_PULLUP IDE 1.0.1 ile eklendi. Hangi Arduino kartını kullandığınız önemli değil, hepsi PULLUP'ı destekliyor.
baldengineer

Yanıtlar:


23

INPUTPimi a olarak ayarlayan varsayılan değerdir INPUT. Pin tamamen bağlı değilse, rasgele HIGHve okuyacaktır LOW. + 5V veya 0V'ye bağlarsanız, açıkça HIGHveya okuyacaktır LOW.

Arduino'nun içinde 50k-ohm civarında bir değere sahip olan dirençler bulunur. Bu dirençler isteğe bağlı olarak kullanılarak dahili olarak bağlanabilir INPUT_PULLUP. Bu, işlevsel olarak (ve elektriksel olarak) pin ve + 5V arasına 50k ohm'luk bir direnç bağlamaya eşdeğerdir, tek fark, harici bileşen gerektirmemesidir ve programın yürütülmesi sırasında yazılımı açıp kapatabilirsiniz.

Öyleyse neden çekmeli ve çekmeli değil? Bunun birkaç nedeni olabilir, ancak kablo düğmeleri veya anahtarlar veya "normalde açık" herhangi bir şey olduğunda, bunları yalnızca toprağa bağlamanız gerekir, bunlara + 5V atmanız gerekmez. Çoğu tahta, her ne kadar ekranlama nedenleriyle büyük zemin boşluklarıyla tasarlanacak olduğundan, toprağa bağlama pratik sebeplerdir.

ARM yongaları gibi bazı özellikli IC'lerde hem yukarı hem de aşağı inişler var, ancak 8-bit AVR çizgisi sadece yukarı çekmelerle geliyor. Sadece HIGHbunun "açık" ve LOW"kapalı" olduğunu hatırlamalısın .


Oyla. FYI, belgelere göre dahili çekimler 20K'dır, 50K'dan fazla bir fark yaratmaz. arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

1.0.1'den önceki sürümlerde, kullanarak çekmeyi açabileceğinizi unutmayın digitalWrite(). Ve hala yapabilirsin.

Kod:

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

Bu önemli bir ayrımdır, çünkü INPUT_PULLUPpull-up direncini açıkça açar. Bununla birlikte, daha az belirgin olan, 1.0.1 ile başlayan, basitçe çağırmanın INPUT, çekmeyi kapatmaya zorlamasıdır. (Önceden, çekme durumu aynı kaldı).

Bir iğnenin çekerek veya çekmeden nasıl çalıştığını görmek için aşağıdaki videoları izleyin.

Bir osiloskopta kayan pim: http://www.youtube.com/watch?v=dBIBFLYCjMM

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

Pull-Ups'daki tam öğretici video (INPUT_PULLUP, Arduino kütüphanesine eklenmeden önce bunu yaptığımı unutmayın): http://www.youtube.com/watch?&v=jJnD6LdGmUo


Çok zeki. Bunu yazdığın için teşekkürler. Oyla.
SDsolar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.