Cách sử dụng 74HC595

0
31

Cách sử dụng 74HC595 : Bạn đã bao giờ muốn điều khiển nhiều đèn LED chưa? Hay chỉ cần nhiều chân I / O hơn để điều khiển các nút bấm, cảm biến, servo cùng một lúc? Chà, bạn có thể nối một vài cảm biến vào các chân Arduino, nhưng bạn sẽ nhanh chóng bắt đầu hết chân trên Arduino của mình.

Kiến thức điện tử : Transistor NPN

Giải pháp cho việc này là sử dụng ‘Bộ ghi dịch’. Bộ ghi dịch cho phép bạn mở rộng số lượng chân I / O mà bạn có thể sử dụng từ Arduino của mình (hoặc bất kỳ vi điều khiển nào cho vấn đề đó).74HC595 (‘595’) là một trong những IC nổi tiếng nhất trong số tất cả.

Về cơ bản, 595 điều khiển tám chân đầu ra riêng biệt, chỉ sử dụng ba chân đầu vào. Và nếu bạn cần nhiều hơn 8 chân I / O bổ sung, bạn có thể dễ dàng daisychain như nhiều thanh ghi dịch như bạn thích và tạo nhiều đường I / O. Tất cả điều này được thực hiện bởi việc dịch bit.

Khi nào sử dụng Ghi dịch? – Cách sử dụng 74HC595

Thanh ghi dịch thường được sử dụng với mục đích lưu các chân trên vi điều khiển, vì mọi vi điều khiển đều có một số chân I / O (GPIO) hạn chế.

Nếu dự án của bạn cần điều khiển 16 đèn LED riêng lẻ, điều đó thường yêu cầu 16 chân của Arduino. Trong trường hợp bạn không có sẵn 16 chân I / O, thì đây là lúc thanh ghi dịch có ích. Với hai thanh ghi dịch được kết nối nối tiếp, chúng ta có thể hoàn thành nhiệm vụ điều khiển 16 đèn LED mà chỉ sử dụng 3 chân I / O. Và không chỉ điều này; bạn có thể tiết kiệm nhiều chân hơn khi có nhiều thanh ghi dịch mà bạn đã liên kết với nhau.

Một ví dụ trong thế giới thực sử dụng thanh ghi dịch là ‘ Bộ điều khiển Nintendo ‘. Bộ điều khiển chính của Hệ thống Giải trí Nintendo cần thiết để thực hiện tất cả các lần nhấn nút theo thứ tự và nó sử dụng thanh ghi dịch để hoàn thành nhiệm vụ đó.

 Cách sử dụng 74HC595

SIPO Vs PISO Thanh ghi dịch

Thanh ghi dịch có hai loại cơ bản : SIPO hoặc PISO. Chip SIPO phổ biến là 74HC595 và chip PISO là 74HC165 .

Loại đầu tiên, SIPO, hữu ích để kiểm soát một số lượng lớn các đầu ra, như đèn LED. Trong khi loại thứ hai, PISO, tốt để nhận một số lượng lớn các đầu vào, như các nút bấm ; giống như cái được sử dụng trong Bộ điều khiển Nintendo như đã thảo luận ở trên.

Bộ ghi dịch 74HC595 hoạt động như thế nào?

595 có hai thanh ghi (có thể được coi là “vùng chứa bộ nhớ”), mỗi thanh ghi chỉ có 8 bit dữ liệu. Cái đầu tiên được gọi là Thanh ghi dịch. Thanh ghi dịch nằm sâu trong các mạch IC.

Bất cứ khi nào chúng tôi đặt một xung clock cho 595, hai điều xảy ra:

  • Các bit trong Thanh ghi dịch di chuyển sang trái một bước. Ví dụ: Bit 7 nhận giá trị trước đó ở bit 6, bit 6 nhận giá trị của bit 5, v.v.
  • Bit 0 trong thanh ghi dịch chấp nhận giá trị hiện tại trên chân DATA. Tại cạnh lên của xung, nếu chân dữ liệu ở mức cao, thì giá trị 1 sẽ được đẩy vào thanh ghi dịch. Nếu không, nó là 0.

Khi pin Latch được bật, nội dung của thanh ghi dịch được sao chép vào thanh ghi thứ hai, được gọi là Storage / Latch Register. Mỗi bit của thanh ghi lưu trữ được kết nối với một trong các chân đầu ra Q A – Q H của vi mạch, vì vậy nói chung, khi giá trị trong thanh ghi lưu trữ thay đổi, các đầu ra cũng vậy.

Bạn có thể hiểu rõ hơn điều này với hình minh họa bên dưới.

 Cách sử dụng 74HC595

Đầu ra của bộ ghi dịch 74HC595 – Cách sử dụng 74HC595

595 có nhiều loại và kiểu dáng; ở đây chúng ta sẽ nói về SN74HC595N của Texas Instruments phổ biến.

Chúng ta hãy nhìn vào Sơ đồ chân của nó. Lưu ý rằng hai chân có một đường trên tên của chúng; điều này có nghĩa là chúng hoạt động theo “logic âm”.

 Cách sử dụng 74HC595

 

GND nên được kết nối với đất của Arduino.

VCC là nguồn cung cấp cho bộ ghi dịch 74HC595 mà chúng ta kết nối chân 5V trên Arduino.

SER (Đầu vào nối tiếp) pin được sử dụng để cấp dữ liệu vào bộ ghi dịch mỗi lần một chút.

SRCLK (Xung clock ) là xung clock cho bộ ghi dịch. 595 được điều khiển bằng xung cạnh lên. Điều này có nghĩa là để chuyển các bit vào bộ ghi dịch, xung nhịp phải ở mức CAO. Và các bit được chuyển vào trên cạnh lên của xung clock.

RCLK là một chân rất quan trọng. Khi được điều khiển CAO, nội dung của bộ ghi dịch được sao chép vào bộ ghi Lưu trữ / lacth; mà cuối cùng hiển thị ở đầu ra. Vì vậy, Pin Lacth có thể được xem như bước cuối cùng trong quy trình để xem kết quả của chúng ta ở đầu ra, trong trường hợp này là đèn LED.

SRCLR (Xóa bộ ghi dịch )pin cho phép thiết lập lại toàn bộ bộ ghi dịch, làm cho tất cả các bit của nó bằng 0, cùng một lúc. Đây là một chân logic âm, vì vậy để thực hiện thiết lập lại này; chúng ta cần đặt SRCLR pin LOW. Khi không cần thiết chân này phải ở mức CAO.

OE (Kích hoạt đầu ra) cũng là logic âm: Khi điện áp trên nó CAO, các chân đầu ra bị vô hiệu hóa / đặt ở trạng thái trở kháng cao và không cho phép dòng điện chạy qua. Khi OE nhận được điện áp thấp, các chân đầu ra hoạt động bình thường.

QA – QH (Kích hoạt đầu ra) là các chân đầu ra và phải được kết nối với một số loại đầu ra như đèn LED, 7 phân đoạn, v.v.

QH’ Pin xuất ra bit 7 của bộ ghi dịch. Nó ở đó để chúng ta có thể tạo chuỗi 595: nếu bạn kết nối QH ‘này với chân SER của 595 khác và cung cấp cho cả hai IC cùng một tín hiệu xung, chúng sẽ hoạt động giống như một IC duy nhất có 16 đầu ra. Tất nhiên, kỹ thuật này không giới hạn ở hai IC – bạn có thể tạo chuỗi liên kết bao nhiêu tùy thích, nếu bạn có đủ nguồn cho tất cả chúng.

Kết nối bộ ghi dịch 74HC595 với Arduino UNO

Bây giờ chúng ta đã hiểu cơ bản về cách 74HC595 hoạt động, chúng ta có thể bắt đầu kết nối nó với Arduino của mình!

Bắt đầu bằng cách đặt bộ ghi dịch vào breadboard , đảm bảo mỗi bên của vi mạch nằm ở một phía riêng biệt của breadboard. Với rãnh nhỏ hình chữ U hướng lên trên, các chốt có chiều từ 1-8 hướng xuống bên tay trái từ trên xuống dưới và 16 – 9 hướng xuống phía bên tay phải từ trên xuống dưới như có thể thấy trong hình minh họa bên dưới.

Để bắt đầu, hãy kết nối các chân 16 (VCC) và 10 (SRCLR) với chân 5v trên Arduino và kết nối các chân 8 (GND) và 13 (OE) với chân Gnd trên Arduino. Điều này sẽ giữ cho vi mạch ở chế độ làm việc bình thường.

Tiếp theo, chúng ta cần kết nối ba chân mà chúng ta sẽ điều khiển bộ ghi dịch với:

  • Chân 11 (SRCLK) đến chân 6 trên Arduino
  • Chân 12 (RCLK)  đến chân 5 trên Arduino
  • Chân 14 (SER)  đến chân 4 trên Arduino

Bây giờ, chúng tôi chỉ cần kết nối tất cả các chân đầu ra với đèn LED của chúng tôi, đảm bảo rằng một điện trở 220Ω được đặt trước đèn LED để giảm dòng điện và các cực âm của đèn LED trở lại đất.

Khi đặt các đèn LED, hãy đảm bảo rằng chúng được kết nối theo thứ tự, để QA được nối dây với đèn LED đầu tiên và QH được nối với đèn LED cuối cùng.

Khi bạn hoàn thành, bạn sẽ có một cái gì đó giống như hình minh họa bên dưới.

 Cách sử dụng 74HC595

Code Arduino – Cách sử dụng 74HC595

int latchPin = 5;	// Latch pin of 74HC595 is connected to Digital pin 5
int clockPin = 6;	// Clock pin of 74HC595 is connected to Digital pin 6
int dataPin = 4;	// Data pin of 74HC595 is connected to Digital pin 4

byte leds = 0;		// Variable to hold the pattern of which LEDs are currently turned on or off

/*
 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */
void setup() 
{
  // Set all the pins of 74HC595 as OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

/*
 * loop() - this function runs over and over again
 */
void loop() 
{
  leds = 0;	// Initially turns all the LEDs off, by giving the variable 'leds' the value 0
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)	// Turn all the LEDs ON one by one.
  {
    bitSet(leds, i);		// Set the bit that controls that LED in the variable 'leds'
    updateShiftRegister();
    delay(500);
  }
}

/*
 * updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
 */
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

Khi bạn tải mã lên Arduino, bạn sẽ thấy đầu ra xuất hiện như sau:

 Cách sử dụng 74HC595

Nếu bạn muốn tắt một trong các đèn LED thay vì bật, bạn sẽ gọi hàm bitClear () tương tự của Arduino trên biến ‘leds’. Điều này sẽ đặt bit ‘led’ cụ thể đó là 0 và sau đó bạn chỉ cần gọi updateShiftRegister()để cập nhật các đèn LED thực tế.

Giải thích mã – Cách sử dụng 74HC595

Điều đầu tiên chúng ta làm là xác định 3 chân điều khiển viz. Lacth, xung clock và chân dữ liệu của 74HC595, chúng tôi sẽ kết nối với các chân kỹ thuật số # 5, # 6 và # 4 của Arduino tương ứng.

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;

Tiếp theo, một biến được gọi là ‘led’ được xác định. Điều này sẽ được sử dụng để giữ kiểu đèn LED hiện đang được bật hoặc tắt. Dữ liệu kiểu ‘byte’ đại diện cho các số sử dụng tám bit. Mỗi bit có thể bật hoặc tắt, vì vậy điều này hoàn hảo để theo dõi xem đèn LED nào trong số tám đèn LED của chúng tôi đang bật hoặc tắt.

// Variable to hold the pattern of which LEDs are currently turned on or off
byte leds = 0;

Trong hàm ‘ Setup() ‘: chúng tôi chỉ cần khởi tạo ba chân để trở thành đầu ra kỹ thuật số.

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

Ban đầu biến tất cả các đèn LED tắt, bằng cách thiết lập tất cả các bit của biến ‘led’ để 0. Sau đó nó gọi hàm tùy chỉnh được gọi updateShiftRegister()sẽ gửi giá trị ‘led’ đến bộ ghi dịch để tất cả các đèn LED tắt .

Chương trình tạm dừng trong nửa giây và sau đó bắt đầu đếm từ 0 đến 7 bằng cách sử dụng vòng lặp ‘for’ và biến ‘i’. Mỗi lần, nó sử dụng hàm bitSet () của Arduino để đặt bit điều khiển đèn LED cụ thể trong biến ‘leds’. Sau đó, nó cũng gọi updateShiftRegister()để trạng thái của đèn LED thay đổi theo những gì có trong ‘leds’ biến.

Sau đó, có một nửa giây trễ trước khi ‘i’ tăng lên và đèn LED tiếp theo sáng.

void loop() 
{
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);
  }
}

Trước hết updateShiftRegister(), hàm này đặt Pin lacth thành LOW, sau đó gọi hàm Arduino shiftOut()trước khi đưa Pin lacth lên CAO một lần nữa.

Rất may, Arduino cung cấp một chức năng trợ giúp dành riêng cho các bộ ghi dịch được gọi là shiftOut(), cho phép chúng ta chỉ cần dịch chuyển các bit trong một lần gọi.

Hàm shiftOut() có bốn thông số; hai đầu tiên là các chân để sử dụng cho Dữ liệu và xung clock tương ứng. Tham số thứ ba chỉ định phần cuối của dữ liệu mà bạn muốn bắt đầu. Chúng ta sẽ bắt đầu với bit bên phải , được gọi là ‘Least Significant Bit’ (LSB).

Tham số cuối cùng là dữ liệu thực tế được chuyển vào bộ ghi dịch, trong trường hợp này là ‘leds’.

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}
 

LEAVE A REPLY

Please enter your comment!
Please enter your name here