Đề tài: Cho biết rằng IC HC595 là IC ghi dịch. Cho 8 led nối với đầu ra của con IC này . Đầu vào IC là 3 chân A0,A1,A2 được nối tương ứng với SCK , RCK, SDI ( SDI chân dữ liệu , SCK chân clock , RCK: chốt DL) . Lập trình 8 led dùng IC HC595. Bao gồm các hiệu ứng. Snake(), canh_buom(),:
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN MÔN HỌC VI XỬ LÝ
NHÓM 2 Phạm Văn Chính-B20DCVT429 (Nhóm trưởng)
Nguyễn Đức Anh-B19DCDT009 Phạm Tiến Anh-B18DCDT012 Trần Gia Bảo-B19DCDT018 Giảng viên giảng dạy: Nguyễn Trung Hiếu
HÀ NỘI - 2023
Trang 2Đề tài: Cho biết rằng IC HC595 là IC ghi dịch Cho 8 led nối với đầu ra của con IC này Đầu vào IC là 3 chân A0,A1,A2 được nối tương ứng với SCK , RCK, SDI ( SDI chân dữ liệu , SCK chân clock , RCK: chốt DL) Lập trình 8 led dùng IC HC595 Bao gồm các hiệu ứng Snake(), canh_buom(),:
-A Mô tả đề tài
Bài toán điều khiển đèn LED thông qua vi điều khiển STM32F103R6 và
IC 74HC595 là một phần trong dự án nhúng Báo cáo này tập trung vào việc phân tích và giải thích cách sử dụng IC 74HC595 để mở rộng số lượng đèn LED điều khiển thông qua một số chân GPIO hạn chế của vi điều khiển STM32F103R6
Mục tiêu của dự án là hiện thực hai hiệu ứng LED đơn giản là "Snake"
và "Canh_buom" sử dụng IC 74HC595 để di chuyển và thay đổi trạng thái của các đèn LED Bên cạnh đó, chúng ta cũng sẽ tối ưu thời gian thực hiện của hai hiệu ứng này để đạt được hiệu năng cao và mượt mà trong việc điều khiển LED
B Tổng quan về IC ghi 74HC595 và vi điều khiển
STM32F103R6
I. IC ghi dịch 74HC595
1. Nguyên lý hoạt động: IC 74HC595 là một loại IC đa chức năng được sử dụng để mở rộng số lượng đầu ra của vi điều khiển thông qua giao tiếp nối tiếp (Serial-In-Parallel-Out - SIPO) IC này có khả năng điều khiển 8 đầu ra song song và chỉ cần 3 chân điều khiển từ vi điều khiển để điều khiển 8 đèn LED
2. Đặc điểm và chức năng: Số đầu ra: 8 đầu ra song song, giúp
mở rộng số lượng đèn LED hoặc các thiết bị ngoại vi khác Đầu vào: Hỗ trợ giao tiếp nối tiếp thông qua 3 chân: SDI (Chốt dữ liệu), SCK (Chân dữ liệu), RCK (Chân clock)
Trang 3o Chân SDA: nó set (đặt giá trị 1) hoặc reset (đặt giá trị 0) chân SDI tương ứng với bit dữ liệu muốn gửi Sau khi đã gửi tất cả
8 bit dữ liệu, vi điều khiển thực hiện xung clock (SCK) để chốt dữ liệu vào thanh ghi dịch
o Chân SCK Khi vi điều khiển muốn gửi dữ liệu, nó thực hiện xung clock bằng cách set (lên mức logic cao) chân SCK và sau đó reset (xuống mức logic thấp) chân SCK
o Chân RCK: Sau khi đã gửi tất cả 8 bit dữ liệu vào thanh ghi dịch của IC 74HC595 thông qua các xung clock SCK, vi điều khiển thực hiện xung chốt bằng cách set (lên mức logic cao) chân RCK và sau đó reset (xuống mức logic thấp) chân RCK Khi chân RCK được chốt, dữ liệu từ thanh ghi dịch của IC 74HC595 được lưu vào các đầu ra song song Q0 đến Q7, từ
đó điều khiển các đèn LED tương ứng
II. Vi điều khiển STM32F103R6
1. Vi điều khiển STM32F103R6 là một vi điều khiển ARM Cortex-M3 cung cấp bởi STMicroelectronics Nó có hiệu suất cao và được sử dụng phổ biến trong các ứng dụng nhúng
và điều khiển
2 Đặc điểm và chức năng:
o Vi xử lý: ARM Cortex-M3 với tốc độ xung nhịp cao
o Bộ nhớ: Bộ nhớ Flash tích hợp và bộ nhớ RAM để lưu trữ chương trình và dữ liệu
o Giao tiếp: Hỗ trợ nhiều giao tiếp như GPIO, SPI, I2C,
UART
o Đầu vào/Đầu ra: Có nhiều chân GPIO để giao tiếp với các thiết bị ngoại vi như IC 74HC595
o Điều khiển: Được lập trình bằng các ngôn ngữ lập trình như C/C++ và hỗ trợ nhiều công cụ lập trình
III. Tương quan giữa IC 74HC595 và vi điều khiển STM32F103R6
Vi điều khiển STM32F103R6 sẽ gửi dữ liệu đến IC 74HC595 thông qua các chân giao tiếp SPI như SDI và SCK Dữ liệu này sau đó được lưu trữ trong thanh ghi dịch của IC 74HC595 và điều khiển các đèn LED thông qua các chân Q0 đến Q7 Vi điều khiển STM32F103R6 sẽ cũng điều khiển chân RCK của IC 74HC595 để chốt dữ liệu và làm cho các đèn LED sáng hoặc tắt theo trạng thái dữ liệu đã được lưu trữ
Trang 4Điều này cho phép vi điều khiển STM32F103R6 mở rộng số lượng đèn LED điều khiển mà không cần nhiều chân GPIO, giúp tiết kiệm tài
nguyên và quản lý dễ dàng các đèn LED trong ứng dụng nhúng
C Giải thích code, cách hoạt động
1 Khai báo và cấu hình các chân GPIO của vi điều khiển
STM32F103R6:
o Chân GPIOA0 được sử dụng để giao tiếp với chân SDI của
IC 74HC595
o Chân GPIOA1 được sử dụng để giao tiếp với chân SCK của
IC 74HC595
o Chân GPIOA2 được sử dụng để giao tiếp với chân RCK của
IC 74HC595
2 Hàm delay():
o Hàm delay() được sử dụng để tạo trễ thời gian trong mã lệnh
o Đối số 'time' là số lần lặp để tạo trễ Mỗi lần lặp tương đương với một khoảng thời gian nhỏ (trong trường hợp này, 1ms)
3 Hàm shiftout(int val):
o Hàm shiftout() được sử dụng để gửi dữ liệu (val) từ vi điều khiển STM32F103R6 tới IC 74HC595 thông qua giao tiếp SPI
o Hàm này gửi 8 bit dữ liệu (byte) từ bit cao nhất (MSB) đến bit thấp nhất (LSB) thông qua chân SDI của IC 74HC595
o Sau khi gửi mỗi bit dữ liệu, vi điều khiển đẩy bit dữ liệu ra chân SCK (Serial Clock) của IC 74HC595 bằng cách set bit SCK lên rồi reset lại
o Dữ liệu được chốt vào thanh ghi dịch của IC 74HC595 sau khi gửi xong cả 8 bit
4 Hàm setLed(int index, int state):
o Hàm setLed() được sử dụng để bật hoặc tắt một đèn LED cụ thể (index) thông qua vi điều khiển IC 74HC595
o Biến 'output' là biến lưu trữ dữ liệu để gửi tới IC 74HC595 Mỗi bit của biến 'output' tương ứng với một đèn LED Khi bit
là 1, đèn LED sẽ được bật; khi bit là 0, đèn LED sẽ được tắt
o Biến 'state' được sử dụng để xác định trạng thái bật (state = 1) hoặc tắt (state = 0) của đèn LED cụ thể (index)
o Hàm shiftout() được gọi để gửi dữ liệu 'output' tới IC
74HC595 sau khi thay đổi trạng thái của đèn LED
Trang 55 Hàm Buffterfly():
o Hàm Buffterfly() được sử dụng để thực hiện hiệu ứng
"Buffterfly" (hiệu ứng con bướm)
o Trong hiệu ứng này, hai đèn LED ở hai vị trí đối diện của thanh LED sẽ tắt và bật đồng thời, tạo ra hiệu ứng con bướm
di chuyển
6 Hàm snake():
o Hàm snake() được sử dụng để thực hiện hiệu ứng "snake" (hiệu ứng con rắn)
o Trong hiệu ứng này, một đèn LED sẽ di chuyển từ trái qua phải và quay lại Đèn LED sẽ di chuyển theo một hướng và chuyển đổi trạng thái bật/tắt của các đèn LED liên tiếp để tạo
ra hiệu ứng con rắn di chuyển
7 Hàm main():
o Trong hàm main(), các hiệu ứng Buffterfly() và snake() được lặp lại vô hạn để thực hiện liên tục các hiệu ứng LED trên mạch Hiệu ứng Buffterfly() sẽ được thực hiện 3 lần trước khi thực hiện hiệu ứng snake() 4 lần, sau đó lại quay lại tiếp tục thực hiện Buffterfly() và snake()
D Mô phỏng trên Proteus
Nhận xét: Vi điều khiển STM32F103R6 và IC 74HC595 cho phép mở rộng số lượng đèn LED điều khiển mà không cần nhiều chân GPIO của
vi điều khiển Hiệu ứng LED được điều khiển mượt mà và ổn định, không gặp tình trạng đèn LED bị đứng hoặc không hoạt động đúng cách
Để có cải thiện hiệu quả, có thể tối ưu hóa mã lệnh và sử dụng các
phương pháp tăng tốc độ xử lý để thực hiện các hiệu ứng LED nhanh hơn và mượt mà hơn
Với IC 74HC59 giúp cho chúng ta có thể giao tiếp nối tiếp với nhiều với
IC 74HC595
Trang 6E Code trên KeilC 5