กลับไปหน้ารวมไฟล์
shift-register-tutorial-d8d362.md

เมื่อก่อนพี่เคยสอนวิธีควบคุม 7 Segment Display ด้วย Arduino ใช้อิ้งไปตั้ง 7 ขาเลยใช่มะ

คราวนี้พี่จะพาน้องไปรู้จักกับ ชิฟต์เรจิสเตอร์ (Shift Register) ตัวช่วยที่ทำให้เราควบคุม 7 Segment หลายๆ ตัวได้ด้วยแค่ 3 ขา! งานนี้จัดไปวัยรุ่น!

ขยายขาแบบจัดเต็มด้วย 74HC595 Shift Register

บอร์ด Arduino Uno นี่ขา Digital มันจำกัดมาก ถ้าน้องลองต่อ LED หรือรีเลย์ 8 ตัว รับรองหมดขาแบบไม่เหลือให้เซนเซอร์หรือ LCD เลย! Shift Register นี่แหละคือฮีโร่ที่มาช่วยแก้ปัญหานี้ ด้วย IC ตำนานอย่าง 74HC595 เราสามารถยัดข้อมูลไบนารี่ 8 บิต (เช่น 11001010) เข้าไปผ่านแค่ 3 ขา ของ Arduino เท่านั้น! ตัวชิปจะทำหน้าที่เป็นบัฟเฟอร์ฮาร์ดแวร์ เก็บข้อมูลแบบเรียงลำดับ แล้วส่งออกไปพร้อมกันแบบขนาน ทำให้ 3 ขา กลายเป็น 8 ขา!

รู้จักกับ Synchronous Serial Interface (Data, Clock, Latch)

74HC595 ไม่ใช่ I2C หรือ SPI นะ มันใช้โปรโตคอลแบบ 3 สายดิบๆ ที่เราต้องสั่งงานด้วย shiftOut() เองเลย!

  1. Clock Pin (SRCLK): สัญญาณนาฬิกา ติ๊กต็อกๆ คอยจับจังหวะให้ Arduino กับ IC ทำงานพร้อมกัน
  2. Data Pin (SER): ขานี้ Arduino จะยิงสัญญาณ HIGH หรือ LOW ลงไปในแต่ละจังหวะของ Clock
  3. Latch Pin (RCLK): พอข้อมูล 8 บิตโหลดเข้าไปในหน่วยความจำของชิปหมดแล้ว Arduino จะดึงขานี้เป็น HIGH ทันใดนั้น IC ก็จะปล่อยสถานะของทั้ง 8 บิตออกไปที่ขา Output (QA-QH) พร้อมกันแบบรัวๆ!
int dataPin = 11;
int clockPin = 12;
int latchPin = 8;

void loop() {
  // มาลองเปิด LED ขาที่ 1, 3, และ 8 กัน! Binary: 10000101 (Hex: 0x85)
  byte ledMatrix = 0b10000101; 
  
  digitalWrite(latchPin, LOW); // ล็อกบัฟเฟอร์ไว้ก่อน!
  
  // ยิงข้อมูล 8 บิตออกไปด้วย shiftOut()!
  shiftOut(dataPin, clockPin, MSBFIRST, ledMatrix); 
  
  digitalWrite(latchPin, HIGH); // ปล่อยของ! LED ทั้ง 8 ดวงอัพเดทพร้อมกัน!
  delay(1000);
}

ต่อเป็นทอดๆ ได้ขาเพิ่มแบบไม่รู้จบ!

ความเจ๋งของ 74HC595 อยู่ที่ขา Q7' (Pin 9) ที่เป็น Serial Out!

  • ถ้าน้องต่อขา Q7' ของ Shift Register ตัวแรก เข้ากับขา Data Input ของตัวที่สอง...
  • น้องก็สามารถใช้ shiftOut() สองครั้ง โดยใช้ Arduino แค่ 3 ขาเดิม!
  • ข้อมูล 8 บิตแรกจะล้นจากชิปตัวแรกเข้าไปในตัวที่สองทันที! เท่ากับว่าน้องได้ 16 ขา Output จาก 3 ขา เท่านั้น! ทฤษฎีแล้วต่อเป็นทอดๆ ได้เป็นร้อยชิปเลยนะ เอาไปทำเมทริกซ์ 8x8 ยังไหว! ห้ามช็อตนะตัวนี้

อุปกรณ์ที่ต้องมี

  • Arduino Uno/Nano (เป็นหัวเรือใหญ่คอยคำนวณและส่งข้อมูล)
  • IC 74HC595 Shift Register (ตัวงานหนักที่แปลงข้อมูลแบบอนุกรมให้เป็นแบบขนาน)
  • LED 8 ดวง และตัวต้านทาน (Resistor) 330 โอห์ม
  • บอร์ดเบรดบอร์ด (แนะนำให้ใช้ตัวเก็บประจุ (Capacitor) 0.1µF ต่อคร่อมระหว่างขา VCC/GND ของ 74HC595 ด้วยนะ จะได้ลดสัญญาณรบกวนเวลาสวิตช์ความถี่สูง ไม่งั้นข้อมูลอาจเพี้ยนได้!)

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "Dziubym"
category: "Lab Stuff"
components:
  - "1x Arduino Nano R3"
  - "1x 7 Segment LED Display, InfoVue"
  - "1x Shift Register- Parallel to Serial"
description: "มาเรียนวิธีขับ 7 Segment ด้วย Shift Register กัน! ไม่ใช่แค่ตัวเดียว แต่จะสอนต่อเป็นทอดๆ (Daisy Chain) ให้แสดงผลหลายหลักแบบตึงๆ งานนี้จัดไปแบบวัยรุ่นแน่นอน"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX1+KaoYlPsQfJF7FBzuDfJR7XyWGLTqJ1xaa5UodRUwZf0atbZQ8VvKqViS7dtjnyT3NildH4baoaludizPrVI0XtcPqSYY0gsM="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/shift-register-tutorial-d8d362_cover.jpg"
lang: "en"
likes: 6
passwordHash: "386e5d7bf574c834aee06ce2394c22cf123d3c26d1347526375b0e2f639abe98"
price: 699
seoDescription: "Learn to control 7 segment display using Shift register and daisy chain techniques for multi-digit Arduino displays."
tags:
  - "display"
  - "shift register"
  - "seven segments"
title: "งานง่ายแต่หล่อ: ปลดล็อกพลัง Shift Register กับ 7 Segment อย่างเทพๆ"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/QI1IJLB42G8"
views: 29918