Thanh ghi dịch chuyển là một thiết bị cho phép thêm các đầu vào hoặc đầu ra bổ sung vào vi điều khiển.
Thanh ghi dịch chuyển thực hiện điều này bằng cách chuyển đổi dữ liệu giữa định dạng song song và nối tiếp. Một bộ vi xử lý giao tiếp với thanh ghi dịch chuyển bằng thông tin nối tiếp và thanh ghi dịch chuyển thu thập hoặc xuất thông tin theo định dạng song song (đa chân).
Cần nhiều nút bấm? Hãy cân nhắc sử dụng thanh ghi dịch chuyển.
Thanh ghi dịch chuyển có hai loại cơ bản: SIPO (Serial-In-Parallel-Out – Nối tiếp vào, song song ra) hoặc PISO (Parallel-In-Serial-Out – Song song vào, nối tiếp ra). Loại SIPO hữu ích cho việc điều khiển một số lượng lớn đầu ra, bao gồm đèn LED, trong khi loại PISO thích hợp để thu thập một số lượng lớn đầu vào, chẳng hạn như từ các nút bấm.
SparkFun cung cấp các phiên bản breakout dễ sử dụng cho cả hai loại chip này. Nếu bạn cần nhiều hơn 8 đường I/O bổ sung, bạn có thể dễ dàng liên kết nhiều thanh ghi dịch chuyển với nhau bằng cách kết nối phía đầu ra của board breakout với phía bên phải của board khác.
Tham khảo sơ đồ chân của breakout 74HC595 để biết chi tiết kết nối.
Thanh ghi dịch chuyển thường được sử dụng để tiết kiệm chân trên vi điều khiển. Mỗi vi điều khiển có một số lượng chân hạn chế cho các đầu vào và đầu ra chung (GPIO). Nếu một dự án cần điều khiển 16 đèn LED, thông thường sẽ cần 16 chân của vi điều khiển. Trong trường hợp bạn không có 16 chân I/O khả dụng, đây là lúc thanh ghi dịch chuyển trở nên hữu ích. Với hai thanh ghi dịch chuyển được kết nối nối tiếp, chúng ta có thể thực hiện nhiệm vụ điều khiển 16 đèn LED chỉ với 4 chân I/O.
Bộ điều khiển NES cỡ lớn của Sparkfun sử dụng thanh ghi dịch chuyển để thu thập trạng thái nút.
Một ví dụ thực tế về việc sử dụng thanh ghi dịch chuyển để thu thập đầu vào là bộ điều khiển Nintendo nguyên bản. Vi điều khiển chính của NES cần nhận tín hiệu nhấn nút từ bộ điều khiển và nó đã sử dụng một thanh ghi dịch chuyển để thực hiện nhiệm vụ đó.
Một thanh ghi dịch chuyển 8 bit cần 4 đường của vi điều khiển. Một cho Clock để đồng bộ truyền dữ liệu, một để kích hoạt clock, một để tải/chốt/dịch chuyển các bit và một cho truyền dữ liệu nối tiếp.
Sơ đồ đấu nối Fritzing cho thanh ghi dịch chuyển và Arduino.
Để đọc trạng thái của các chân A-H, chúng ta cần yêu cầu thanh ghi dịch chuyển ghi lại trạng thái của các chân. Chúng ta thực hiện việc này bằng cách kéo chân load xuống mức LOW trong một khoảng thời gian ngắn (5 micro giây). Sau khi các chân được tải, chúng tôi đảm bảo các chân còn lại ở trạng thái ban đầu như được mô tả trong biểu đồ thời gian của datasheet và sử dụng hàm shiftIn
của Arduino để kéo tất cả 8 giá trị chân A-H vào một byte có tên là incoming. Các giá trị được in ra rõ ràng trên Serial Terminal. Sau đó, nó đợi và lặp lại. Nếu bạn kết nối các chân như chúng tôi đã làm ở trên, sẽ dễ dàng kiểm tra xem phần cứng của bạn có hoạt động chính xác hay không.