W nowszych Arduino można ustawić pinMode na jeden z trzech stanów: OUTPUT
, INPUT
i INPUT_PULLUP
.
Układ Atmega w Arduino ma wewnętrzne rezystory podciągające (rezystory podłączane wewnętrznie do zasilania), do których można uzyskać dostęp. Jeśli wolisz używać ich zamiast zewnętrznych rezystorów rozwijających, możesz użyć argumentu INPUT_PULLUP w pinMode (). To skutecznie odwraca zachowanie, gdzie WYSOKI oznacza, że czujnik jest wyłączony, a NISKI oznacza, że czujnik jest włączony.
Jestem raczej pewien, że odwrócenie zachowania to jednak nie jedyna rzecz, jaką robi.
Co robi INPUT_PULLUP
? Czym różni się od INPUT
i jak zdecydować, którego użyć?
Komentarze
- INPUT_PULLUP został dodany z IDE 1.0.1. Nie ma znaczenia, której płyty Arduino używasz, wszystkie obsługują PULLUP.
Odpowiedź
Domyślnie jest to INPUT
, który ustawia pin jako INPUT
. Jeśli pin jest całkowicie odłączony, odczyta losowo HIGH
i LOW
. Jeśli połączysz go z + 5 V lub 0 V, z pewnością będzie to HIGH
lub LOW
.
Wewnątrz Arduino, układ Atmega ma wewnętrzne rezystory podciągające o wartości około 20 kiloomów. (Więcej informacji można znaleźć w dokumentacji DigitalPins ). Te rezystory można opcjonalnie podłączyć wewnętrznie za pomocą INPUT_PULLUP
. Jest to funkcjonalnie (i elektrycznie) równoważne podłączeniu rezystora ~ 20 kΩ między pinem a + 5V, jedyną różnicą jest to, że nie wymaga on żadnych zewnętrznych komponentów i można go włączać i wyłączać w oprogramowaniu podczas wykonywania programu.
Dlaczego więc podciąganie, a nie podciąganie? Istnieje prawdopodobnie kilka powodów, ale kiedy podłączasz przyciski lub przełączniki lub cokolwiek „normalnie otwartego”, musisz tylko przywiązać je do uziemienia, nie musisz uruchamiać do nich + 5 V. Ponieważ większość płyt będzie zaprojektowany z dużymi wylewami masy ze względu na ekranowanie i tak przywiązanie do masy jest praktycznie powodem.
Niektóre bardziej funkcjonalne układy scalone, takie jak chipy ARM, mają zarówno podciąganie, jak i podciąganie, ale 8-bitowa linia AVR jest dostępna tylko z ciągnięciem -ups. Musisz tylko pamiętać, że HIGH
jest „otwarte”, a LOW
jest „zamknięte”.
Komentarze
- Głos za. Do Twojej wiadomości, zgodnie z dokumentacją, wewnętrzne podciągnięcia to 20 000, co nie znaczy, że ma to duże znaczenie w porównaniu z 50 000. arduino.cc/en/Tutorial/DigitalPins
Odpowiedź
Zwróć uwagę, że poprzednie do wersji 1.0.1, możesz włączyć podciąganie za pomocą digitalWrite()
. I nadal możesz.
Kod:
Jest to ważna różnica, ponieważ INPUT_PULLUP
oczywiście włącza rezystor podciągający. Jednak mniej oczywiste jest to, że począwszy od 1.0.1, po prostu wywołanie INPUT
wymusza wyłączenie podciągania. (Wcześniej stan podciągania pozostawał taki sam).
Aby zobaczyć, jak szpilka działa z podciąganiem i bez, obejrzyj następujące filmy.
Pin pływający na oscyloskopie: http://www.youtube.com/watch?v=dBIBFLYCjMM
Z włączoną funkcją Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U
Pełny samouczek wideo na temat pull-upów (zauważ, że zrobiłem to przed dodaniem INPUT_PULLUP do biblioteki Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Komentarze
- Bardzo sprytne. Dziękuję za napisanie tego. Głosuj za.