กลับไปหน้ารวมไฟล์
3-pins-32-leds-4-shift-registers-74hc595-09ae7d.md

นี่คือคู่มือแบบ Step-by-Step ที่พี่จัดทำขึ้นสำหรับมือใหม่และพวก ArduiNOOBS อย่างเราๆ

ในบทสอนนี้ เราจะคุยกันเรื่องความรู้พื้นฐานเกี่ยวกับ Shift Register 8-bit ที่ชื่อว่า 74HC595 กันหน่อย เรียนรู้วิธีต่อมันแบบ Daisy-Chain และใช้โค้ดจาก Library HC595 กัน

อีกอย่าง พี่เจอปัญหากับ Shift Register บางตัวด้วย ไม่รู้ทำไม เป็นเพราะไฟไม่พอรึเปล่า?


Deep Daisy-Chaining: ขยายขอบเขตด้วย Shift Register

Arduino Uno มี Digital pin อยู่ 14 ขา ถ้าน้องอยากจุดไฟ LED แยกกัน 32 ดวง (แบบทำ LED Cube ขนาดยักษ์ หรือแดชบอร์ดเครื่องบิน) มันทำไม่ได้ทางกายภาพอยู่แล้ว โปรเจคนี้จะแนะนำคอนเซปต์พื้นฐานของวิทยาการคอมฯ เรื่อง Serial-To-Parallel conversion โดยการต่อแบบ Cascade เพื่อขยายขีดจำกัดของ Output อย่างมหาศาล โดยใช้แค่ 3 ขาจาก Uno เท่านั้น!

Diagram

The Synchronous Cascade Protocol

ชิป 74HC595 มีขา Output 8 ขา (Q0-Q7) แต่ใช้ขา Input แค่ 3 ขา (Data, Clock, Latch)

  1. ฟิสิกส์ของการ Daisy-Chain: น้องจะต้องต่อสายจากขา Q7' (Serial Out) ของชิป #1 เข้าไปที่ขา Data Pin ของชิป #2 โดยตรงเลย!
  2. น้องต้องเชื่อมขา Clock ทั้ง 4 เส้นเข้าด้วยกัน และขา Latch ทั้ง 4 เส้นเข้าด้วยกัน ตอนนี้เราก็ได้ฮาร์ดแวร์บล็อก 32-bit ที่รวมเป็นหนึ่งเดียวแล้ว!
  3. การทำงานของ Data Pipeline: ถ้าจะเปิด LED ตัวที่ 32, Uno ต้องปั๊มค่า 1 ลงไปในสายข้อมูล มันจะเข้าไปในชิปที่ 1 จากนั้นเราก็ดัน 0 อีก 31 ตัวเข้าไป ค่า 1 นั้นจะถูกผลักทางคณิตศาสตร์ให้ไหลไปจนสุดท่ออิเล็กทรอนิกส์ เข้าไปอยู่ในชิปที่ 4 ตำแหน่งที่ 8 พอดี!
มันคือความผิดพลาดครั้งใหญ่ของพี่เลย
Initial Testing/Basic Setup
ก่อนจะเดินสายไฟไปหา LED
สายรกๆ ตามสไตล์
LEDs
LEDs

การใช้ shiftOut() กับ Bit-Masking ใน Register

จะส่งเลขฐานสิบธรรมดาๆ ไปไม่ได้หรอกน้อง ต้องใช้ shiftOut() เท่านั้น

  • ใน loop() เราใช้เลขจำนวนเต็มขนาด 32 บิตแบบไม่มีเครื่องหมาย (หรือก็คือ 4 ไบต์ ขนาด 8 บิต)!
    uint32_t ledMatrix = 0b10000000000000000000000000000001; // เปิด LED ตัวแรกกับตัวสุดท้าย!
    
    digitalWrite(latchPin, LOW); // หยุดการส่งออกทางกายภาพก่อน! แช่แข็ง LED ไว้!
    // ต้องแยกเลข 32 บิตยักษ์นี่ออกเป็น 4 ก้อน ก้อนละ 8 บิต เพื่อส่งลง SPI!
    shiftOut(dataPin, clockPin, MSBFIRST, (ledMatrix >> 24)); // ส่งให้ Chip ตัวที่ 4!
    shiftOut(dataPin, clockPin, MSBFIRST, (ledMatrix >> 16)); // ส่งให้ Chip ตัวที่ 3!
    shiftOut(dataPin, clockPin, MSBFIRST, (ledMatrix >> 8));  // ส่งให้ Chip ตัวที่ 2!
    shiftOut(dataPin, clockPin, MSBFIRST, ledMatrix);         // ส่งให้ Chip ตัวที่ 1!
    
    digitalWrite(latchPin, HIGH); // ส่งเสร็จแล้ว! จัดเต็มเปิด LED ทั้ง 32 ตัวพรึบ!
    
  • การทำงานมันเร็วมากจนตามองแทบไม่ทันเลยล่ะ ทำให้เราสามารถทำเอฟเฟกต์ไฟวิ่งแบบ Knight-Rider ผ่าน LED ทั้ง 32 ตัวได้ลื่นปรื๊ด!

อุปกรณ์ที่ต้องใช้ (จัดเต็มเวอร์)

  • Arduino Uno/Nano (พื้นฐานต้องมี)
  • ไอซี Shift Register 74HC595 จำนวน 4 ตัว (แบบ DIP)
  • LED สีแดง/เขียว/น้ำเงิน ขนาด 5mm จำนวน 32 ตัว
  • ตัวต้านทาน (Resistor) 220 โอห์ม ธรรมดา จำนวน 32 ตัว
  • Adaptor 5V 3Amp (ถ้าจะเปิด LED ทั้ง 32 ตัวเต็มสว่างพร้อมกัน อย่าไปพึ่งไฟจากบอร์ด Uno เด็ดขาด ไม่งั้น Regulator ระเบิดแน่!)
เคยเจอบั๊กแปลกๆ กับ shift register ตอนใช้เลขชุดนี้ "13CNONKE4"
วิดีโอมาแล้วจ้า!
คลิกดูวิดีโอโชว์ไลท์สุดพิเศษ! ตัดต่อด้วย Premiere ให้ดูเท่ๆ

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

apps:
  - "1x Arduino IDE"
author: "Heathen_Hacks-v2"
category: "Tools & Equipment"
components:
  - "1x Arduino Nano R3"
  - "1x Jumper wires (generic)"
  - "1x LED (generic)"
  - "4x Shift Register- Serial to Parallel"
  - "1x Solderless Breadboard Full Size"
  - "1x Resistor 100 ohm"
description: "Infinite pin expansion! Annihilate the physical hardware limitations of the Arduino Uno by daisy-chaining multiple 74HC595 memory blocks, manipulating massive serial bit-shifting cascades to flawlessly command 32 independent LEDs."
difficulty: "Advanced"
documentationLinks: []
downloadableFiles:
  - "https://github.com/j-bellavance/HC595"
  - "https://github.com/j-bellavance/HC595"
  - "https://projects.arduinocontent.cc/602eb699-a8ab-482f-8084-2e761a04846f.ino"
encryptedPayload: "U2FsdGVkX19uBShQcKAFWD9nRtDkbdY75n5vWkMrzxtlARhWvdDIsa4JNzzGBQZJhFCtgFkWeV9n1hw1TArBm5QykE39APDjD90tdvKYp0E="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/3-pins-32-leds-4-shift-registers-74hc595-09ae7d_cover.jpg"
lang: "en"
likes: 12
passwordHash: "f2b256cd57f479bdca1f89a5320081e2a50257dd0415305124763a4c8b5f990b"
price: 1120
seoDescription: "Learn to control 32 LEDs using 4 Shift Registers [74HC595] and 3 Pins. A beginner-friendly Arduino tutorial on daisy-chaining."
tags:
  - "lights"
  - "daisy-chaining"
  - "shift registers"
title: "3 พิน 32 ไฟ 4 ตัวช่วย [74HC595] งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/N7CAboD1jU0"
  - "https://www.youtube.com/embed/KXWsp9przuk"
views: 34734