GIAO TIẾP LCD 16x2.
Sinh viên thực hiện:
1. Họ và tên: ... MSSV: ... 2. Họ và tên: ... MSSV: ... Thời gian thực hiện: 4 tiết.
Mục tiêu
Bài tập này nhằm mục đích tìm hiểu cách giao tiếp của hệ thống nhúng với LCD thông qua việc xây dựng một hệ thống điều khiển LCD 16x2.
Yêu cầu
Dựa vào các chức năng hỗ trợ của board DE2-115 và IP Core LCD University_Program được cung cấp bởi nhà sản xuất để thiết kế một hệ thống nhúng và sử dụng ngôn ngữ C để lập trình điều khiển hoạt động của LCD 16x2 với các chức năng cơ bản sau:
1. Xóa LCD.
2. Hiển thị chuỗi ký tự lên LCD.
3. Dịch trái, dịch phải chuỗi ký tự đã nhập.
Các bước thực hiện 4.2.3.1 Sơ đồ hệ thống
44
Lưu đồ giải thuật:
Hình 4.2.2 Lưu đồ giải thuật
4.2.3.2 Các bước thực hiện
Bước 1: Tạo hệ thống mới
Ở bước này, chúng ta tạo một hệ thống tương tự như ở bài số 1.
Hình 4.2.3 Tạo hệ thống mới Hình 4.2.4 Chọn chip xử lý Bắt đầu Xóa LCD Hiển thị chuỗi thứ 1 Hiển thị chuỗi thứ 2. Dịch trái Hiển thị chuỗi thứ 1 Hiển thị chuỗi thứ 2.
45
Bước 2: Xây dựng hệ thống trên QSys
Ở project này, chúng ta sẽ thực hiện việc tạo một hệ thống bằng cách sử dụng công sụ QSys.
Tạo một hệ thống bao gồm:
o CPU (Nios II Processor): Nios II/s với JTAG Debug Module Level 2.
o RAM (On-Chip Memory (RAM or ROM)): chế độ RAM có dung lượng 32 Kb với độ rộng dữ liệu 32 bit.
o LCD ( University Program Audio & Video 16x2 Character Display): để hiển thị các dòng chữ hoặc số trong bảng mã ASCII.
Hình 4.2.5 Thêm LCD
46
Các thao tác nối dây, gán bộ nhớ RAM cho CPU, khai báo địa chỉ nền cho phần cứng, biên dịch ta thực hiện tương tự như các bước đã hướng dẫn ở bài trước.
Hình 4.2.7 Hệ thống hoàn chỉnh
Bước 3: Gán chân hệ thống
Tương tự như bước 3 ở lab1 sinh viên thực hiện gán file hệ thống
nios_sys.qip đã tạo ở trên và thư viện
altera_up_character_lcd_communication,
altera_up_character_initialzation cho LCD từ file cài đặt. Sinh viên
có thể tham khảo đường dẫn sau
(C:\altera\11.0sp1\ip\University_Program\Audio_Video\altera_up _valon_character_lcd\hdl). Chú ý tùy vào file cài đặt được lưu ở đâu mà đường dẫn trên có thể thay đổi.
47
Hình 4.2.9 Kết quả sau khi gán chân
Bước 4: Viết chương trình ứng dụng cho hệ thống
Mở chương trình Nios II 11.0 Software Buil Tools for Eclipse, chọn đường dẫn nơi lưu trữ phần mềm ứng dụng (Hình 4.2.10).
Tạo project mới, vào File New Nios II Application and BSP from Template (Hình 4.2.11).
Hình 4.2.10 Cửa sổ workspace
48
Cửa sổ tiếp theo chọn đường dẫn đến file nios_sys.sopcinfo như hình 4.2.12.
Hình 4.2. 12 Cửa sổ Nios II Application and BSP form Template
Click phải vào LAB2_bsp[nios_sys] chọn Properties Nios II BSP properties và thiết lập như hình 4.2.13.
49
Click phải vào thư mục LAB2 chọn New Header File (chứa các hàm, tiền định nghĩa tập hợp lại thành thư viện) (Hình 4.2.14). Tạo 2 Header File và đặt tên là LCD.h và main.h.
Hình 4.2.14 Cách tạo Header File
Hình 4.2.15 Tạo fiel LCD.h
Hình 4.2.16 Tạo file main.h
File LCD.h chứa các khai báo hàm/chương trình con, chỉ thị tiền định nghĩa sử dụng trong chương trình chính:
50
/*Mot so chuong trinh dieu khien LCD*/ void Khoi_dong_LCD (char *, char *); void Xoa(alt_up_character_lcd_dev *);
void LCD_XY(alt_up_character_lcd_dev * , int, int);
void LCD_text(alt_up_character_lcd_dev * , char*);
void Dich_trai(alt_up_character_lcd_dev *,char *,char *, int );
void Delay(int); #endif /* LCD_H_ */
File main.h chứa các chương trình con đã được định nghĩa ở file LCD.h : #include "altera_up_avalon_character_lcd.h" #include <sys/alt_stdio.h> #include <unistd.h> #include "system.h" #include "LCD.h" void Xoa(alt_up_character_lcd_dev *LCD_Controller) {alt_up_character_lcd_init (LCD_Controller)}; void LCD_XY(alt_up_character_lcd_dev
*LCD_Controller, int x, int y) {
alt_up_character_lcd_set_cursor_pos (LCD_Controller, x, y)};
Void LCD_text (alt_up_character_lcd_dev *LCD_Controller, char *text)
51
alt_up_character_lcd_string (LCD_Controller, text);}
void Delay (int i){ int t;
unsigned int c; c=i*1000000000; for (t=0;t<c;t++);}
void Dich_trai(alt_up_character_lcd_dev
*LCD_Controller,char *text1, char *text2, int time) { int t; int k; for(t=0;t<=15;t++){ for(k=0;k<=time;k++){ LCD_XY (LCD_Controller, t, 0); LCD_text (LCD_Controller, text1); LCD_XY (LCD_Controller, t, 1); LCD_text (LCD_Controller, text2);} Xoa (LCD_Controller);}}
Trên cửa sổ Project Explorer mở chương trình hello_world_small.c trong thư mục LAB2, đây là chương trình demo in ra màn hình một chuỗi ký tự. Ta sẽ xóa chương trình này và gõ đoạn chương trình điều khiển sau đây vào: #include "main.h" #include "altera_up_avalon_character_lcd.h" int main(void) { int w;
52
alt_up_character_lcd_dev *lcd_data; //Dat bien lcd_data lam bien dieu khien LCD
lcd_data = alt_up_character_lcd_open_dev ("/dev/LCD"); Xoa_LCD(lcd_data); while(1) { for(w=0;w<5000;w++) { LCD_XY(lcd_data,0,0); LCD_text(lcd_data,"TRAN_118031"); LCD_XY(lcd_data,0,1); LCD_text(lcd_data,"YENNHI_117997"); } Xoa_LCD(lcd_data); Dich_trai(lcd_data,"LUAN VAN","TOT NGHIEP",1000); Xoa_LCD(lcd_data); } return 0; }
Sau khi gõ đoạn chương trình ta lặp lại các thao tác đã thực hiện ở bước 4 của lab1.
53
Hình 4.2.17 Kết quả biên dịch thành công
Bước 5: Demo hệ thống
Sau khi đã biên dịch và nạp thành công tất cả các quá trình trên, tiến hành chạy thử để kiểm tra chương trình.
Ví dụ: Thay các chuỗi
Text1 = HUYENTRAN_1118031
Text2 = YENNHI_1117997
Text3 = TRAN
Text4 = NHI
Sau đó quan sát kết quả thu được trên màn hình LCD.
Kết quả đạt được
Qua bài thực tập, sinh viên phải nắm vững được các thao tác kết nối giữa máy tính với board DE2-115.
Biết cách sử dụng phần mềm Quartus II 11.0 và QSys để tạo ra phần cứng của hệ thống. Sử dụng được công cụ Nios II Software Build Tools for Eclipse để lập trình phần mềm cho hệ thống nhúng đã thiết kế.
Nắm vững được cách giao tiếp giữa hệ thống nhúng với LCD 16x2 trên board DE2-115.
Có thể thực hiện hiển thị các chuỗi text bất kỳ trên LCD, dịch trái, dịch phải….
54
4.3 BÀI THỰC TẬP SỐ 3: XÂY DỰNG HAI HỆ THỐNG NHÚNG ĐỘC LẬP TRÊN CHIPFPGA