ความแตกต่างระหว่าง INPUT และ INPUT_PULLUP คืออะไร


24

เมื่อวันที่ Arduinos ใหม่หนึ่งสามารถตั้ง pinMode ให้เป็นหนึ่งในสามรัฐ: OUTPUT, และINPUTINPUT_PULLUP

หน้านี้พูดว่า:

ชิป Atmega บน Arduino มีตัวต้านทานแบบดึงขึ้นภายใน (ตัวต้านทานที่เชื่อมต่อกับพลังงานภายใน) ที่คุณสามารถเข้าถึงได้ หากคุณต้องการใช้สิ่งเหล่านี้แทนตัวต้านทานแบบดึงลงภายนอกคุณสามารถใช้อาร์กิวเมนต์ INPUT_PULLUP ใน pinMode () สิ่งนี้จะย้อนกลับพฤติกรรมได้อย่างมีประสิทธิภาพโดยที่ HIGH หมายถึงเซ็นเซอร์ปิดอยู่และ LOW หมายถึงเซ็นเซอร์เปิดอยู่

ฉันค่อนข้างแน่ใจว่าการคว่ำพฤติกรรมไม่ได้เป็นสิ่งเดียวที่ทำ

อะไรINPUT_PULLUPทำอย่างไร อะไรทำให้แตกต่างจากINPUTและหนึ่งจะตัดสินใจเลือกที่จะใช้?


เพิ่ม INPUT_PULLUP ด้วย IDE 1.0.1 มันไม่เกี่ยวข้องกับบอร์ด Arduino ที่คุณใช้พวกมันสนับสนุน PULLUP
baldengineer

คำตอบ:


23

เริ่มต้นเป็นที่ชุดขึ้นขาเป็นINPUT INPUTถ้าขาไม่ได้เชื่อมต่อกันโดยสิ้นเชิงมันจะสุ่มอ่านและHIGH LOWหากคุณผูกมันถึง + 5V หรือ 0V ก็เห็นได้ชัดว่าจะอ่านหรือ HIGHLOW

ภายในตัว Arduino เป็นตัวต้านทานแบบดึงขึ้นที่มีค่าประมาณ 50k-ohm INPUT_PULLUPต้านทานเหล่านี้สามารถเชื่อมต่อเข้าภายในโดยใช้ นี่คือการทำงาน (และทางไฟฟ้า) เทียบเท่ากับการเชื่อมต่อตัวต้านทาน 50k-ohm ระหว่างพินและ + 5V ความแตกต่างเพียงอย่างเดียวก็คือมันไม่จำเป็นต้องมีส่วนประกอบภายนอกและคุณสามารถเปิดและปิดในซอฟต์แวร์ระหว่างการทำงานของโปรแกรมของคุณ

เหตุใดจึงต้องดึงขึ้นและไม่ดึงลง อาจมีสาเหตุหลายประการ แต่เมื่อปุ่มสายไฟหรือสวิตช์หรืออะไรก็ตาม "ปกติเปิด" คุณจะต้องผูกมันไว้กับพื้นคุณไม่จำเป็นต้องวิ่ง + 5V ออกไป เนื่องจากบอร์ดส่วนใหญ่จะได้รับการออกแบบด้วยเทพื้นขนาดใหญ่เพื่อป้องกันเหตุผลต่อไปการผูกลงกับพื้นจึงเป็นเหตุผลในทางปฏิบัติ

ไอซีที่โดดเด่นกว่านี้บางตัวเช่นชิป ARM นั้นมีทั้งแบบดึงขึ้นและลง แต่สาย 8-bit AVR มาพร้อมกับแบบพูลอัพ คุณต้องจำไว้ว่าHIGH"เปิด" และLOW"ปิด"


upvote FYI ตามเอกสารระบุว่า pull-ups ภายในอยู่ที่ 20K ไม่ใช่ว่ามันสร้างความแตกต่างอย่างมากจาก 50K arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

ทราบว่าก่อนหน้านี้เพื่อ 1.0.1 คุณสามารถเปิด pullups digitalWrite()โดยใช้ และคุณยังสามารถ

รหัส:

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

นี่คือความแตกต่างที่สำคัญเพราะINPUT_PULLUPเห็นได้ชัดว่าเปิดตัวต้านทานแบบดึงขึ้น อย่างไรก็ตามชัดเจนน้อยกว่าคือเริ่มต้นด้วย 1.0.1 เพียงเรียกINPUTแรงดึงขึ้นเพื่อปิด (ก่อนหน้านี้สถานะของการดึงขึ้นยังคงเหมือนเดิม)

ในการดูว่าพินทำงานอย่างไรโดยมีและไม่มีพูลอัพให้ดูวิดีโอต่อไปนี้

PIN ลอยบนออสซิลโลสโคป: http://www.youtube.com/watch?v=dBIBFLYCjMM

ด้วยการเปิดใช้งาน Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U

วิดีโอสอนเต็มรูปแบบเกี่ยวกับ Pull-Ups (โปรดทราบว่าฉันทำสิ่งนี้ก่อนที่จะเพิ่ม INPUT_PULLUP ในไลบรารี Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo


ฉลาดมาก. ขอบคุณสำหรับการเขียนนี้ upvote
SDsolar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.