Sunday, February 19, 2017

BÀI 45 : GIAO TIẾP VỚI GLCD PIC16F877A CCS

Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn giao tiếp với GLCD. Trước tiên mình tìm hiểu về lý thuyết trước.

Graphic LCD được sử dụng trên mạch BKIT PIC là loại LCD chấm, không màu, có độ phân giải 128x64 tức 8192 chấm.

14.1 Giới thiệu GLCD 128x64 Graphic LCD được sử dụng trên mạch BKIT PIC là loại LCD chấm, không màu, có độ phân giải 128x64 tức 8192 chấm. GLCD được thiết kế để điều khiển được từng chấm, nên có thể dùng để hiển thị bất kỳ ký tự hay hình ảnh nào. Với mỗi chấm tương ứng một bit dữ liệu, GLCD 128x64 cần 8192 bits RAM hay 1024 bytes RAM để hiển thị toàn màn hình.
Loại GLCD YM12864J sử dụng 2 chip điều khiển KS0108 rất phổ biến của Samsung, mỗi chip có 512 bytes RAM. Do đó, nó tương tự như 2 LCD 64x64 ghép lại với nhau.

Hình 15.1 GLCD 128x64

14.1.1 Chức năng các chân của GLCD 128x64 Chức năng các chân:

Các chân từ 4 đến 17 được kết nối trực tiếp đến vi điều khiển. Các chân còn lại được kết nối tùy theo chức năng tương ứng của nó.

Chân EN Khi thực hiện một quá trình giao tiếp với GLCD, ban đầu, chân EN được kéo xuống thấp. Trong khi đó, các chân điều khiển khác được thiết lập. Sau khi thiết lập xong, chân EN được kích lên mức cao để cho phép tín hiệu. Sau khoảng thời gian cần thiết cho quá trình hoàn tất, chân EN lại được kéo xuống thấp để sẵn sàng cho một quá trình khác. Chân RS và RW Hai chân này được kết hợp để thiết lập cho các thanh ghi của GLCD theo bảng sau:

Chân CS1 và CS2 Chọn chip điều khiển GLCD – KS0108 để giao tiếp, tích cực mức cao. 14.1.2 Tổ chức bộ nhớ RAM Chip điều khiển GLCD KS0108 chỉ có một loại bộ nhớ là RAM, không có bộ nhớ chứa bộ font CGROM hay chứa mã font tự tạo CGRAM như của Text LCD. Dữ liệu ghi vào RAM sẽ được hiển thị trực tiếp trên GLCD. Mỗi chip KS0108 có 512 bytes RAM tương ứng với 4096 chấm trên một nửa (64x64) LCD. RAM của KS0108 được truy cập theo từng byte, nghĩa là mỗi lần viết một giá trị vào một byte nào đó trên RAM của GLCD, sẽ có 8 chấm bị tác động, 8 chấm này nằm trên cùng 1 cột. Do đó, 64 dòng GLCD được chia thành 8 pages, mỗi page có độ cao 8 bit và rộng 128 cột (tính cả 2 chip).
Sơ đồ bố trí RAM:


Hình 15 2 Sơ đồ bố trí RAM của GLCD 128x64
Với mỗi chip KS0108, RAM chia thành 8 page, mỗi page bao gồm 64 cột, mỗi cột bao gồm 8 chấm. Các page được gọi là địa chỉ X, mang giá trị từ 0 đến 7, X = 0 tương ứng với page 0 và tương tự. Các cột được gọi là địa chỉ Y, cột đầu tiên có giá trị Y = 0 và cột cuối cùng có giá trị Y = 63. Mỗi cột là một byte RAM, D0 đến D7, với D0 tương ứng điểm trên cao và D7 tương ứng điểm bên dưới. Các lệnh di chuyển được hỗ trợ theo cặp địa chỉ X, Y.
Minh họa hiển thị ký tự “a” trên GLCD:


Hình 15.3 Ký tự "a" trên GLCD
Như hình trên, ký tự “a” được xác định bằng cách ghi dữ liệu vào X = 0 và Y = 0...7 theo bảng sau:

Hình 15.4 Dữ liệu RAM cho ký tự "a"
Giá trị Data là các giá trị cần nạp cho vùng RAM tương ứng. 14.1.3 Các lệnh của GLCD 128x64Bảng lệnh
1. Lệnh hiển thị ON/OFF Dữ liệu được hiển thị lên màn hình khi bit D (DB0) bằng 1 và ngược lại khi D bằng 0. Khi D bằng 0, dữ liệu vẫn tồn tại trong DDRAM.
Lập trình:
• RW = 0
• RS = 0
• Opcode = 0x3E + D (D = 0:1) 2. Hiển thị Start Line Chọn một dòng nào đó của RAM để làm dòng đầu tiên được hiển thị lên, nghĩa là “cuộn” hình ảnh trong RAM lên một khoảng LOffset, với LOffset có giá trị từ 0 đến 63. Phần bị che khuất khi cuộn sẽ được hiển thị tiếp ngay bên dưới. Ví dụ với LOffset = 20:

Không có văn bản thay thế tự động nào.
Hình 15.5 Cuộn lên 20 dòng
Lập trình:
• RS = 0
• RW = 0
• Opcode = 0xC0 + LOffset 3. Thiết lập trang (địa chỉ X) Thiết lập địa chỉ X để truy xuất RAM.
Lập trình:
• RS = 0
• RW = 0
• Opcode = 0xB8 + X 4. Thiết lập địa chỉ Y Thiết lập địa chỉ Y để truy xuất RAM.
Lập trình:
• RS = 0
• RW = 0
• Opcode = 0x40 + Y 5. Đọc trạng thái Đọc trạng thái của GLCD, chủ yếu kiểm tra bit BUSY (bit 7).
Lập trình:
• RS = 0
• RW = 1 6. Ghi dữ liệu hiển thị Ghi dữ liệu vào RAM tại địa chỉ X, Y. Sau khi ghi xong, giá trị Y sẽ tự động được tăng lên 1 đơn vị, chuyển sang cột tiếp theo hoặc trở về cột đầu tiên, tức Y = 0.
Lập trình:
• RS = 1
• RW = 0 7. Đọc dữ liệu hiển thị Đọc dữ liệu từ RAM tại địa chỉ X, Y. Sau khi đọc xong, giá trị Y sẽ tự động được tăng lên 1 đơn vị, chuyển sang cột tiếp theo hoặc trở về cột đầu tiên, tức Y = 0.
Lập trình:
• RS = 1
• RW = 1
14.2 Xây dựng chương trình14.2.1 Khởi tạo graphic LCD Quá trình khởi tạo được thực hiện như sau:

  • Khởi tạo các chân liên kết với glcd(thiết lập input/output).
  • Chọn chip điều khiển thứ nhất.
  • Thiết lập chân RS ở chế độ ghi lệnh.
  • Gửi lệnh bât màn hình (0x3F).
  • Gửi lệnh để thiết lập địa chỉ Y (0x40 + Y).
  • Gửi lệnh để thiết lập địa chỉ X (địa chỉ trang) (0xB8 + X).
  • Gửi lênh chọn dòng nào trong RAM để hiển thị lên.
  • Làm tương từ bước thứ 2 cho chip thứ 2.
Tương ứng với từng lệnh trên trong chương trình như sau:
Code:
glcd_write_byte(GLCD_ON_DISPLAY); glcd_write_byte(GLCD_SET_Y_ADDR); glcd_write_byte(GLCD_SET_PAGE); glcd_write_byte(GLCD_START_LINE);
Với các tham số truyền vào có giá trị như sau:
Code:
#define GLCD_ON_DISPLAY 0x3F // DB0: turn display on #define GLCD_START_LINE 0xC0 // 11XXXXXX: set lcd start line #define GLCD_SET_PAGE 0xB8 // 10111XXX: set lcd page (X) address #define GLCD_SET_Y_ADDR 0x40 // 01YYYYYY: set lcd Y address
14.2.2 Ghi dữ liêu lên GLCDHàm ghi dữ liêu(một byte) có thể viết như sau:
Code:
GLCD_CTRL_PORTbits.GLCD_CTRL_RW = 0;// chế độ ghi GLCD_DATA_PORT = abyte; // ghi dữ liệu GLCD_CTRL_PORTbits.GLCD_CTRL_E = 1;// sau khi ghi bật chân EN lên 1 để cho phép tín hiệu _nop();_nop();_nop(); GLCD_CTRL_PORTbits.GLCD_CTRL_E = 0;// cho chân EN xuống 0 lại để chuẩn bị cho lần thiết lập tiếp theo _nop();_nop();_nop();
Các bạn download code mẫu và file mô phỏng ở trên theo link này : Click here

No comments:

Post a Comment