pullupdown

Pull-up Pull-down คืออะไร

เมื่อมีการกำหนด pin ให้มีเป็น ขา INPUT แต่เมื่อไม่มีการต่อกับภายนอก โปรแกรมก็จะไม่สามารถกำหนดสถานะ (State of pin) อย่างชัดเจน เรียกว่าสถานะการนี้ว่า floating อาจเป็น HIGH หรือ LOW บอกได้ยาก เพื่อป้องการไม่เป็น unknown state จึงมีการใช้งาน pull-up (to vcc) หรือ pull-down (to ground) resistor
การต่อแบบ Pull-ups resistor ร่วมกับ button

เมื่อ pull-up resister เมื่อไม่มีการกดปุ่มกระแสจะไหล จาก VCC ไปสู่ input pin ทำให้ค่าที่อ่านได้ จะมีค่าใกล้เคียง กับ VCC แต่เมื่อมีการกดปุ่ม จะทำให้กระแสไหลลง ground และ input pin จะเชื่อม โดยตรงกับ Ground แต่หากไม่มีการใส่ตัว R1 resister (Resister มีหน้าที่ จำกัดกระแสที่ยอมให้ไหลผ่านวงจร) ไว้ในวงจร จะทำให้เกิดความเสียหาย เพราะเป็นการ short circuit (ประมาณกระแส จะเป็น infinity ตามหลักของ Ohm’s law

การเลือกค่า pull-up resister ที่เหมาะสม
เมื่อกำหนดให้มีค่า resister ต่ำ จะทำให้มีกระแส ไหลสูง ในทางกลับกันหาก มีการใช้ค่า resister จะมีการไหลของกระแสต่ำ ดังนั้นการกำหนดการใช้งานจะต้องคำนึงถึงองค์ประกอบสองส่วน

  1. เมื่อมีการกดปุ่ม input pin (pulled down) จะเชื่อมต่อกับ ground  ขนาดของตัวต้านทาน R1 จะเป็นตัวกำหนดกระแสที่ไหลจาก vcc  ผ่าน button ไปยัง ground
  2.  เมื่อไม่มีการกด (pulled high) ขนาดของ R1 ก็เป็นการกำหนดกระแสที่ไหลเข้าสู่ pin

ค่าที่เหมาะสมจะต้องมีขนาดที่มากพอที่ไม่ทำอันตรายกับ MCU และ ไม่มากเกินไป จนไม่สามารถอ่านค่าได้ โดยทั่วไปค่าขนาดที่เหมาะสม ประมาณ 10 k ohm สำหรับ ATmega328 สามารถ เปิดการใช้งาน pull-up register ได้ด้วย
pinMode(5, INPUT_PULLUP); // Enable internal pull-up resistor on pin 5

ทดสอบ Pullup
ต่อวงจรตามรูปด้านล่าง สายสีดำจะเชื่อมกับ ground และเชื่อมกับขาข้างหนึ่งของ switch และขาอีกข้างหนึ่งของ switch ให้ต่อกับขาที่ pin2

arduino code