TÀI LIỆU THỰC HÀNH ----------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Lập trình điều khiển LED đơn kết hợp IC 74HC595
Mục đích
Thực hành kỹ năng lập trình, biên dịch, nạp và thực thi một chương trình hoàn chỉnh sử dụng kit mạch thực
Thực hành kỹ thuật lập trình truy xuất các cổng vào ra cơ bản
Thực hành kỹ thuật lập trình điều khiển LED đơn với mạch mở rộng kết nối vào ra số sử dụng IC dịch 74HC595
Trình tự thực hành
A Kết nối mạch thực hành
1) Kết nối mạch PIC16F877A và mạch LED
Sử dụng 2 module PIC16F877A và module LED, cắm jack kết nối các chân trên module LED với module PIC16F877A theo thứ tự tương ứng với 2 cột ở bảng sau:
Kit mạch PIC16F877A Kit mạch LED
Sử dụng module nguồn tích hợp để cấp nguồn cho kit thực hành Module nguồn hỗ trợ các dải điện áp: 3,3V, 5V, 12V
Kết nối nguồn 5V với kit vi điều khiển và các module thành phần theo sơ đồ:
Module nguồn ATX Module vi điều khiển Module LED
Kiểm tra kỹ chân kết nối trước khi thực hiện thao tác bật nguồn cho hệ thống Gạt công tắc sang trạng thái ON để cấp nguồn
3) Cài đặt Kit LED làm việc ở chức năng LED đơn
Module LED là module kết hợp giữa LED 7 thanh và LED đơn nên khi sử dụng cần gạt switch Bit để lựa chọn chức năng cần dùng
Khi sử dụng module với LED đơn cần gạt các switch ở vị trí: 4 8 lên trạng thái
ON và các switch 1 3 trạng thái OFF
Chiều gạt lên là ON và ngược lại
4) Sơ đồ nguyên lý phần kết nối PIC16F877A và led đơn:
1) Mục đích của chương trình
Lập trình điều khiển IC dịch 74HC595 bắt tắt các bóng LED đơn sang tuần tự theo chiều mong muốn
Khoảng thời gian bật hoặc tắt cài đặt được thông qua hàm
Ứng dụng trong cảnh báo mức với số LED sáng
2) Mô tả thuật toán chương trình a) Thuật toán điều khiển IC dịch 74HC595
Nguyên lý làm việc của IC 595:
Thanh ghi dịch 74HC595 thường được sử dụng với bộ vi điều khiển hoặc bộ vi xử lý để mở rộng các chân ra số GIPO 74HC595 chỉ yêu cầu 3 chân kết nối với MCU, đó là Clock, Data và Latch 74HC595 có điện áp hoạt động rộng từ 2V đến 6V và có thể ghép nối tiếp để mở rộng không giới hạn số lượng đầu ra về mặt lý thuyết Dưới đây là một mạch ứng dụng của IC tạo ra 8 đầu ra điều khiển LED đơn
Sơ đồ ghép nối mở rộng điều khiển 8 led đơn:
(Nguồn ảnh tham khảo internet)
Sơ đồ ghép nối mở rộng điều khiển 16 led đơn sử dụng 2 IC 74HC595 Theo nguyên lý trên ta có thể mở rộng tuỳ ý số lượng OUTPUT thông qua việc ghép nối tiếp chuỗi n IC 74HC595 lại với nhau
(Nguồn ảnh tham khảo internet)
Ý nghĩa các chân IC74HC595
Chân 14: đầu vào dữ liệu nối tiếp Tại 1 thời điểm xung clock chỉ đưa vào được
Q0 Q7 (output): (15, 1, 2, 3, 4, 5, 6, 7) Xuất dữ liệu khi chân 13 tích cực ở mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12.
Chân 13 (output-enable): Chân cho phép tích cực ở mức thấp (0) Khi ở mức cao, tất cả các đầu ra của 74HC595 trở về trạng thái cao trở, không có đầu ra nào được cho phép
Chân 9 (SQH): Chân dữ liệu nối tiếp Nếu dùng nhiều 74HC595 mắc nối tiếp nhau thì chân này đưa vào đầu vào của IC tiếp theo khi đã dịch đủ 8bit.
Chân 11 (Shift clock): Chân vào xung clock Khi có 1 xung clock tích cực ở sườn dương (từ 0 lên 1) thì 1bit được dịch vào IC.
Chân 12 (Latch clock): xung clock chốt dữ liệu Khi có 1 xung clock tích cực ở sườn dương thì cho phép xuất dữ liệu trên các chân output (chú ý chiều dịch dữ liệu từ Q0Q7)
Chân 10 (Reset): khi chân này ở mức thấp (mức 0) thì dữ liệu sẽ bị xóa trên chip
Nguyên lý làm việc mô tả minh họa như hình dưới:
Thuật toán điều khiển hiển thị 8 led đơn
Định nghĩa (đặt tên) các chân điều khiển chính để tiện sử dụng trong chương trình Sinh viên có thể không cần các lệnh này nếu sử dụng các tên PIN_X có sẵn Với X là pin muốn
Đưa 8 bit dữ liệu nối tiếp ở đầu vào chân DS vào thanh ghi đệm trong IC
Input: data => là tham số kiểu nguyên 8 bit, là dữ liệu cần đưa vào thanh ghi đệm của IC void Init_74hc595(int data) // { int i; output_low(SHCP_PIN); // clock=0 for(i=0; i