Đang tải... (xem toàn văn)
TÀI LIỆU THỰC HÀNH ----------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Trang 1TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP
KHOA ĐIỆN TỬ
Bộ môn : Công nghệ Thông tin
TÀI LIỆU HƯỚNG DẪN THỰC HÀNH
Giáo viên hướng dẫn thực hành :
Giáo viên giảng dạy : …………
Kỳ - Năm học : ………… ………… u
Trang 2Đánh giá kết quả quá trình
Trang 3QUY ĐỊNH THỰC HIỆN VỚI MỖI BÀI THỰC HÀNH
Yêu cầu:
thuyết khi kết thúc thực hành
Các bước cần chuẩn bị:
trả lời hết tất các câu hỏi trong tài liệu Yêu cầu chép tay phần trả lời
Bước 2: Xin chữ ký xác nhận đã hoàn thành phần tự chuyển bị ở nhà của Giảng
viên hướng dẫn thực hành trước khi vào phòng thực hành
Bước 3: Đọc kỹ và thực hiện đúng quy trình thực hành đã in và dán trên mỗi Kit
thực hành
Bước 4: Thực hiện theo đúng tài liệu hướng dẫn đối với mỗi bài thực hành
Bước 5: Báo cáo kết quả bài thực hành theo yêu của của Giảng viên và yêu cầu
Giảng viên chấm điểm
Bước 6: Ký nhận vào sổ Thực hành thực hành.
Trang 6số sử dụng IC dịch 74HC595
1.1.2 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:
Trang 72) Kết nối nguồn:
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
Trang 8Kế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
Trang 9Khi 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
Trang 104) Sơ đồ nguyên lý phần kết nối PIC16F877A và led đơn:
B Lập trình mẫu
1) Mục đích của chương trình
chiều mong muốn
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:
Trang 11(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
1 bit
Trang 12 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.
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
nhau thì chân này đưa vào đầu vào của IC tiếp theo khi đã dịch đủ 8bit.
dương (từ 0 lên 1) thì 1bit được dịch vào IC.
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)
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
#Define DS_PIN PIN_B0 #define SHCP_PIN PIN_B1
Trang 13#define STCP_PIN PIN_B2
Đư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) // {
Xuất dữ liệu trong thanh ghi đệm của IC ra 8 cổng ra Q0Q7 của IC
void OUTPUT_74HC595() // tạo xung dương để chốt dữ liệu
b) Thuật toán chương trình chính
Chương trình chính sẽ thực hiện 2 chương trình con sáng dần và tắt dần tuần tự
Trang 14c) Thuật toán chương trình điều khiển LED sáng từ trái qua phải với thời gian trễ T
Với module LED sử dụng bao gồm 2 IC 74HC595 và 16 LED được gán lần lượt theo 2 IC 74HC595, thuật toán điều khiển LED sáng dần với thời gian trễ T:
Trang 15for(int i = 0; i < 16 ; i++) //Lặp 16 lần tương ứng với số LED
Khi số LED nhỏ hơn 8 hay chỉ những LED trên IC 74HC595 số 1 được sáng, các LED trên IC 74HC595 số 2 tắt hết Theo quy luật tràn của IC 74HC595 thì dữ liệu gửi đi sẽ lần lượt từ IC xa nhất rồi giảm dần, vậy cần gửi dữ liệu tắt LED đến IC 74HC595 2 trước rồi đến IC 74HC595 1
Init_74hc595(0); //dữ liệu tắt LED đến IC 74HC595 số 2 Init_74hc595(Data_LED[i]); //dữ liệu LED sáng lần lượt đến IC 74HC595 số 1
OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây
Tương tự khi số LED lớn hơn 8 hay số LED trên IC 74HC595 số 1 đã sáng hết
Init_74hc595(Data_LED[i - 8]); //dữ liệu LED sáng lần lượt đến IC 74HC595 số 2
Init_74hc595(0xFF); //dữ liệu bật toàn bộ LED đến IC 74HC595 số 1
OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây
d) Thuật toán chương trình điều khiển LED sang từ phải qua trái với thời gian trễ T Ngược với bài toán trên ta chỉ việc đảo ngược thuật toán như sau:
Trang 16Init_74hc595(Data_LED[i - 8]);//dữ liệu LED 2 tắt lần lượt ngược với bật lần lượt
Init_74hc595(0xFF);//dữ liệu LED 1 sáng hết OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây
3) Mã chương trình mẫu hoàn chỉnh
Code mẫu tham khảo trên link:
https://github.com/manhtuan07081998/he_thong_nhung/blob/main/led_don_595.c
#include <16F877A.h> #device ADC=10
#use delay(crystal=12MHz) #define DS_PIN PIN_B0 #define SHCP_PIN PIN_B1 #define STCP_PIN PIN_B2
unsigned char Data_LED[] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};
void Init_74hc595(int data); void OUTPUT_74HC595();
void LED_sang_dan_trai_qua_phai(int16 toc_do); void LED_tat_dan_phai_qua_trai(int16 toc_do);
Trang 18Thực hiện tạo project trên phần mềm CCS và viết lại chương trình trên Thực hiện biên dịch và hiệu chỉnh lỗi nếu có Sau khi hoàn tất, gắn chip và nạp chương trình Cấp nguồn cho KIT và kiểm tra kết quả chạy thực Thay đổi giá trị tốc độ và kiểm tra kết quả
1.1.3 Bài tập
1 Bật lần lượt 2 LED từ trái qua phải sau mỗi t giây 2 Tắt lần lượt 2 LED từ phải qua trái sau mỗi t giây
3 Bật các LED chẵn tắt các LED lẻ và đổi trạng thái sau t giây
1.2 Lập trình LED 7 đoạn 1.2.1 Mục đích
sử dụng kit mạch thực
ra số sử dụng IC dịch 74HC595
1.2.2 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:
Trang 20Kế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
Trang 21Khi 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
Trang 224) Sơ đồ nguyên lý phần kết nối PIC16F877A và led đơn:
B Lập trình mẫu
1) Mục đích của chương trình
2) Mô tả thuật toán chương trình
a) Thuật toán điều khiển LED 7 đoạn sử dụng IC74HC595
Nguyên lý làm việc của LED 7 đoạn:
LED 7 đoạn là một thiết bị hiển thị điện tử được sử dụng để hiển thị số Nó bao gồm 7 đoạn LED, được sắp xếp thành hình chữ nhật đứng Mỗi đoạn LED có thể được bật hoặc tắt để tạo ra các ký tự và số
Có hai loại LED 7 đoạn chính là:
được nối chung lại với nhau Để bật một đoạn LED, cần cấp điện áp dương cho anode của đoạn LED đó
nối chung lại với nhau Để bật một đoạn LED, cần cấp điện áp âm cho cathode của đoạn LED đó
Trang 23Theo sơ đồ trên ta có thể thấy cấu tạo LED 7 đoạn được cấu thành từ 7 LED đơn xếp thành 1 hình chữ nhật và 1 dấu “.”
Quy định các chân LED được kí hiệu từ a f, chân COM là chân chung sẽ được cấp GND nếu LED chung cathode và cấp VCC nếu LED chung anode, chân DP là vị trí dấu
Trang 24“.” Từ đó ta có thể xây dựng mô hình hiển thị các giá trị số và chữ thông qua bật/tắt các LED tương ứng theo hình sau
Trang 25Xây dựng bản giá trị đầu ra tương ứng với 2 loại LED Từ mô hình sử dụng 1 LED ứng dụng phát triển trên LED 7 thanh có 4 chữ số
Trang 26Dựa trên nguyên lý IC74HC595 đã ứng dụng tại bài thực hành LED
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
Trang 27(Nguồn ảnh tham khảo internet)
Ý nghĩa các chân IC74HC595
1 bit
mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12.
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
nhau thì chân này đưa vào đầu vào của IC tiếp theo khi đã dịch đủ 8bit.
dương (từ 0 lên 1) thì 1bit được dịch vào IC.
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)
3) Mã chương trình mẫu hoàn chỉnh
Code mẫu hiển thị 1 số có 8 chữ số bất kì lên màn hình LED 7 thanh thông qua hàm
hien_thi_led([số cần hiển thị]);
Trang 28const unsigned char Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //mã LED 7 thanh với từng số dạng hex: 0 9
const unsigned char CodeNumber[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; //mã quét LED với 8 LED
void Init_74hc595(unsigned int data); //Hàm xuất dữ liệu đến IC 74HC595
void OUTPUT_74HC595(); // Hàm gửi dữ liệu xác nhận IC 74HC595 xuất dữ liệu đầu ra
void hien_thi_led(int32 so_hien_thi); //Hàm hiển thị số đã
hien_thi_led(12345678); //kiểm tra hiển thị số “12345678” lên LED 7 thanh
Trang 29void OUTPUT_74HC595() //// Hàm gửi dữ liệu xác nhận IC 74HC595 xuất dữ liệu đầu ra
Thực hiện thao tác tạo project trên phần mềm ccs và nạp code chạy thử với giá trị ngày tháng năm sinh dưới dạng: dd/mm/yyyy ví dụ 23/11/1996
Chương trình ứng dụng làm đồng hồ bấm giờ sử dụng timer:
#include <16F877A.h>
#use delay(crystal=12MHz) #define DS_PIN PIN_B0
Trang 30#define SHCP_PIN PIN_B1 #define STCP_PIN PIN_B2
Trang 31void Init_74hc595(unsigned int data)
Trang 322 Vẽ lại sơ đồ kết nối các chân giữa module PIC1F877A và Module LED 3 Vẽ lại sơ đồ kết nối các chân giữa module PIC1F877A và Module LED với
6 Trình bày nguyên lý làm việc của IC595 7 Trình bày nguyên lý làm việc của LED 7 đoạn
Trang 38Bài 2: Lập trình đọc tín hiệu Analog và hiển thị LCD 16x2 2.1 Lập trình hiển thị LCD
2.1.1 Mục đích
sử dụng kit mạch thực
truyền thông I2C
2.1.2 Trình tự thực hành
A Giới thiệu màn hình LCD 2004
LCD 20x4 là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị chữ hoặc số trong bảng mã ASCII Mỗi ô của Text LCD bao gồm các chấm tinh thể lỏng, các chấm này kết hợp với nhau theo trình tự “ẩn” hoặc “hiện” sẽ tạo nên các kí tự cần hiển thị và mỗi ô chỉ hiển thị được một kí tự duy nhất
LCD 20x4 nghĩa là loại LCD có 4 dòng và mỗi dòng có thể hiển thị được 20 kí tự Đây là loại màn hình được sử dụng rất phổ biến trong các loại mạch điện Cấu trúc hiển thị của màn hình như sau:
Trang 39*Lưu ý:
sử dụng và bài toán lựa chọn phương pháp phù hợp
tăng giảm đến khi có được độ sáng mong muốn
Sử dụng màn hình LCD với I2C:
Trang 40B Giới thiệu về chuẩn truyền thông I2C:
I2C kết hợp các tính năng tốt nhất của SPI và UART Với I2C, bạn có thể kết nối nhiều slave với một master duy nhất (như SPI) và bạn có thể có nhiều master điều khiển một hoặc nhiều slave Điều này thực sự hữu ích khi bạn muốn có nhiều hơn một vi điều khiển ghi dữ liệu vào một thẻ nhớ duy nhất hoặc hiển thị văn bản trên một màn hình LCD
Giống như giao tiếp UART, I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:
dọc theo một đường duy nhất (đường SDA)
Giống như SPI, I2C là đồng bộ, do đó đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bởi một tín hiệu xung nhịp được chia sẻ giữa master và slave Tín hiệu xung nhịp luôn được điều khiển bởi master
Cách hoạt động của I2C:
Với I2C, dữ liệu được truyền trong các tin nhắn Tin nhắn được chia thành các khung dữ liệu Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ slave và một hoặc nhiều khung dữ liệu chứa dữ liệu đang được truyền Thông điệp cũng bao gồm điều
Trang 41kiện khởi động và điều kiện dừng, các bit đọc / ghi và các bit ACK / NACK giữa mỗi khung dữ liệu:
Điều kiện khởi động: Đường SDA chuyển từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển từ mức cao xuống mức thấp
Điều kiện dừng: Đường SDA chuyển từ mức điện áp thấp sang mức điện áp cao sau khi đường SCL chuyển từ mức thấp lên mức cao
Khung địa chỉ: Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác định slave khi master muốn giao tiếp với nó
Bit Đọc / Ghi: Một bit duy nhất chỉ định master đang gửi dữ liệu đến slave (mức điện áp thấp) hay yêu cầu dữ liệu từ nó (mức điện áp cao)
Bit ACK / NACK: Mỗi khung trong một tin nhắn được theo sau bởi một bit xác nhận / không xác nhận Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công, một bit ACK sẽ được trả lại cho thiết bị gửi từ thiết bị nhận
Địa chỉ:
slave biết rằng dữ liệu đang được gửi đến slave này chứ không phải slave khác Nó thực hiện điều này bằng cách định địa chỉ Khung địa chỉ luôn là khung đầu tiên sau bit khởi động trong một tin nhắn mới
nó Sau đó, mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó Nếu địa chỉ phù hợp, nó sẽ gửi lại một bit ACK điện áp thấp cho master Nếu địa chỉ không khớp, slave không làm gì cả và đường SDA vẫn ở mức cao
ghi dữ liệu vào nó hay nhận dữ liệu từ nó Nếu master muốn gửi dữ liệu đến slave,
Trang 42bit đọc / ghi ở mức điện áp thấp Nếu master đang yêu cầu dữ liệu từ slave, thì bit ở mức điện áp cao
Khung dữ liệu:
Sau khi master phát hiện bit ACK từ slave, khung dữ liệu đầu tiên đã sẵn sàng được gửi
Khung dữ liệu luôn có độ dài 8 bit và được gửi với bit quan trọng nhất trước Mỗi khung dữ liệu ngay sau đó là một bit ACK / NACK để xác minh rằng khung đã được nhận thành công Bit ACK phải được nhận bởi master hoặc slave (tùy thuộc vào cái nào đang gửi dữ liệu) trước khi khung dữ liệu tiếp theo có thể được gửi
Sau khi tất cả các khung dữ liệu đã được gửi, master có thể gửi một điều kiện dừng cho slave để tạm dừng quá trình truyền Điều kiện dừng là sự chuyển đổi điện áp từ thấp lên cao trên đường SDA sau khi chuyển tiếp từ thấp lên cao trên đường SCL , với đường SCL vẫn ở mức cao
Các bước truyền dữ liệu I2C:
Master gửi điều kiện khởi động đến mọi slave được kết nối bằng cách chuyển đường SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp
Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn giao tiếp, cùng với bit đọc / ghi
Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó Nếu địa chỉ trùng khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit Nếu địa chỉ từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao Master gửi hoặc nhận khung dữ liệu
Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công khung
Để dừng truyền dữ liệu, master gửi điều kiện dừng đến slave bằng cách chuyển đổi mức cao SCL trước khi chuyển mức cao SDA
Một master với nhiều slave:
Vì I2C sử dụng định địa chỉ nên nhiều slave có thể được điều khiển từ một master duy nhất Với địa chỉ 7 bit sẽ có 128 (2 mũ 7) địa chỉ duy nhất Việc sử dụng địa chỉ 10 bit không phổ biến, nhưng nó cung cấp 1.024 (2 mũ 10) địa chỉ duy nhất Để kết nối nhiều slave đến một master duy nhất, bạn có thể đấu dây như thế này, với điện trở kéo lên 4,7K Ohm kết nối đường SDA và SCL với Vcc: