Sự khác biệt giữa INPUT và INPUT_PULLUP là gì?


24

Trên Arduinos mới hơn, người ta có thể thiết lập pinMode đến một trong ba trạng thái: OUTPUT, INPUT, và INPUT_PULLUP.

Trang này nói:

Chip Atmega trên Arduino có điện trở kéo bên trong (điện trở kết nối với nguồn bên trong) mà bạn có thể truy cập. Nếu bạn thích sử dụng những cái này thay vì điện trở kéo xuống bên ngoài, bạn có thể sử dụng đối số INPUT_PULLUP trong pinMode (). Điều này có hiệu quả đảo ngược hành vi, trong đó CAO có nghĩa là cảm biến tắt và THẤP có nghĩa là cảm biến được bật.

Tôi khá chắc chắn rằng đảo ngược hành vi không phải là điều duy nhất mà nó làm, mặc dù.

Không gì INPUT_PULLUPlàm gì? Điều gì làm cho nó khác biệt INPUT, và làm thế nào để một người quyết định sử dụng cái nào?


INPUT_PULLUP đã được thêm bằng IDE 1.0.1. Việc bạn sử dụng bo mạch Arduino nào là không liên quan, tất cả đều hỗ trợ PULLUP.
baldengineer

Câu trả lời:


23

Mặc định là INPUTthiết lập pin là một INPUT. Nếu pin hoàn toàn bị ngắt kết nối, nó sẽ đọc ngẫu nhiên HIGHLOW. Nếu bạn buộc nó thành + 5V hoặc 0V, rõ ràng nó sẽ đọc HIGHhoặc LOW.

Bên trong Arduino là các điện trở pullup có giá trị khoảng 50k-ohm. Những điện trở này có thể được kết nối tùy chọn trong nội bộ bằng cách sử dụng INPUT_PULLUP. Đây là chức năng (và điện) tương đương với việc kết nối điện trở 50k-ohm giữa pin và + 5V, điểm khác biệt duy nhất là nó không yêu cầu các thành phần bên ngoài và bạn có thể bật và tắt phần mềm trong khi thực hiện chương trình.

Vậy tại sao pull-up và không pull-down? Có thể có một số lý do cho nó, nhưng khi các nút hoặc công tắc dây hoặc bất cứ thứ gì "thường mở", bạn chỉ phải buộc chúng xuống đất, bạn không cần phải chạy + 5V ra chúng. Vì hầu hết các bảng sẽ được thiết kế với các mặt đất lớn vì lý do che chắn dù sao, buộc vào mặt đất là lý do thực tế.

Một số IC đặc trưng hơn như chip ARM có cả kéo và kéo xuống, nhưng dòng AVR 8 bit chỉ đi kèm với pull-up. Bạn chỉ cần nhớ rằng HIGH"mở" và LOW"đóng".


Upvote. FYI, theo tài liệu, pull-up nội bộ là 20K, không phải nó tạo ra nhiều khác biệt so với 50K. arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

Lưu ý rằng trước đó đến 1.0.1, bạn có thể bật pullups bằng cách sử dụng digitalWrite(). Và bạn vẫn có thể.

Mật mã:

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

Đây là một sự khác biệt quan trọng vì INPUT_PULLUPrõ ràng là bật điện trở kéo lên. Tuy nhiên, ít rõ ràng hơn, đó là bắt đầu với 1.0.1, chỉ đơn giản là gọi INPUTcác lực lượng kéo lên bị tắt. (Trước đây, trạng thái của pull-up vẫn giữ nguyên).

Để xem cách pin hoạt động có và không có pull-up, hãy xem các video sau.

Ghim nổi trên máy hiện sóng: http://www.youtube.com/watch?v=dBIBFLYCjMM

Với tính năng Kéo lên được bật: http://www.youtube.com/watch?v=SAIw7LLVl-U

Video hướng dẫn đầy đủ về Pull-Ups (lưu ý rằng tôi đã thực hiện điều này trước khi INPUT_PULLUP được thêm vào thư viện Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo


Rất thông minh. Cảm ơn bạn đã viết bài này. Upvote.
SDsolar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.