Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
MỤC LỤC BÀI 1. QUI TRÌNH LẬP TRÌNH PIC ......................................................................................3
1.
GIỚI THIỆU BOARD PIC EXPLORER EXPLORER 16 ............................... ....................................................... ........................ 3
2.
GIỚI THIỆU CÔNG CỤ LẬP TRÌNH PIC ................................. ........................................................ ....................... 4
3.
CÁC BƢỚC LẬP TRÌNH PIC P IC ............................................... .......................................................................... ............................. 5
4.
BÀI TẬP .................................................. ............................................................................ ..................................................... ................................ ..... 9
BÀI 2. GIAO TIẾP I/O ĐƠN GIẢN ....................................................................................... 11
1.
TỔNG QUAN ............................................................... ......................................................................................... ................................... ......... 11
2.
CHƢƠNG TRÌNH MẪU ................................................... ............................................................................. .............................. .... 12
3.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 13
BÀI 3. TIMER ....................................................................................................................... 14
1.
TỔNG QUAN VỀ TIMER TRÊN PIC 24F ................................. ...................................................... ..................... 14
2.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 20
BÀI 4. NGẮT ......................................................................................................................... 23
1.
TỔNG QUAN VỀ NGẮT TRÊN PIC 24F ................................................... ....................................................... .... 23
2.
CÁC BƢỚC XÂY DỰ NG NG Ứ NG NG DỤNG LIÊN QUAN ĐẾN NGẮT ............... 26
3.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 27
BÀI 5. ADC ........................................................................................................................... 29
1.
TỔNG QUAN VỀ ADC TRÊN PIC 24F .................................................. .......................................................... ........ 29
2.
CHƢƠNG TRÌNH MẪU ................................................... ............................................................................. .............................. .... 36
3.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 37
BÀI 6. GIAO TIẾP LCD ........................................................................................................ 38
1.
GIỚI THIỆU LCD TRÊN BOARD PIC EXPLORER 16 ................................. 38
2.
GIAO TIẾP PMP............................................... PMP......................................................................... ............................................... ..................... 41
3.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 43
BÀI 7. GIAO TIẾP UART UART ..................................................................................................... 45
1.
KHÁI NIỆM UART .................................................. ............................................................................. ....................................... ............ 45
2.
MODULE MODULE UART TRÊN PIC 24F .................................. ........................................................... .................................. ......... 45
3.
BÀI TẬP .................................................. ............................................................................ ..................................................... .............................. ... 53 ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 1
Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
Ở ĐẦ ĐẦ U LỜ I M Ở U Giáo trình này đượ c biên soạn nhằ m phục vụ việc giảng d ạ y học phần thự c hành Vi Điề u Khiển và đượ c áp d ụng k ể ể t ừ ừ học k ỳ II ỳ II năm học 2010-2011. ựng g ứ ng Giáo trình gồm 7 bài, giúp sinh viên n ắm đượ c kiế n thứ c về xây d ự n ng ụng cho vi điề u khiể n PIC. Theo qui ch ế đào ế đào tạo tín chỉ , việc chuẩ n bị trướ c ở d ụng nhà là bắ t buộc đố i vớ i sinh viên. Tác giả xin gử i l ờ i cảm ơn đế n các bạn nhóm Vi Điề u Khiể n về nhữ ng ng ý kiế n đóng góp cho giáo trình đượ c hoàn thiện. L ờ i cảm ơn cũng xin đượ c g ử i t ớ ới hãng Microchip đã cung cấ p thiế t bị và tài liệu tham khảo. Đây là lần đầu tiên tác giả biên soạn giáo trình th ự c hành cho học phần này ất mong nhận đượ c ý kiế n phản hồi nên không thể tránh khỏi sai sót. Tác gi ả r ấ đóng góp của các bạn sinh viên để nhữ ng ốt hơn. Mọi ý ng l ần biên soạn sau đượ c t ốt kiến đóng góp, xin vui lòng gử i về email
[email protected] [email protected]..
ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 2
Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
Ở ĐẦ ĐẦ U LỜ I M Ở U Giáo trình này đượ c biên soạn nhằ m phục vụ việc giảng d ạ y học phần thự c hành Vi Điề u Khiển và đượ c áp d ụng k ể ể t ừ ừ học k ỳ II ỳ II năm học 2010-2011. ựng g ứ ng Giáo trình gồm 7 bài, giúp sinh viên n ắm đượ c kiế n thứ c về xây d ự n ng ụng cho vi điề u khiể n PIC. Theo qui ch ế đào ế đào tạo tín chỉ , việc chuẩ n bị trướ c ở d ụng nhà là bắ t buộc đố i vớ i sinh viên. Tác giả xin gử i l ờ i cảm ơn đế n các bạn nhóm Vi Điề u Khiể n về nhữ ng ng ý kiế n đóng góp cho giáo trình đượ c hoàn thiện. L ờ i cảm ơn cũng xin đượ c g ử i t ớ ới hãng Microchip đã cung cấ p thiế t bị và tài liệu tham khảo. Đây là lần đầu tiên tác giả biên soạn giáo trình th ự c hành cho học phần này ất mong nhận đượ c ý kiế n phản hồi nên không thể tránh khỏi sai sót. Tác gi ả r ấ đóng góp của các bạn sinh viên để nhữ ng ốt hơn. Mọi ý ng l ần biên soạn sau đượ c t ốt kiến đóng góp, xin vui lòng gử i về email
[email protected] [email protected]..
ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 2
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
BÀI 1.
Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
QUI TRÌNH LẬP TRÌNH PIC
MỤC ĐÍCH Thông qua bài này, sinh viên sẽ nắm rõ: Cách thức sử dụng board PIC Explorer 16 trong quá trình h ọc tập. ợ để xây dựng chƣơng trình, Cách sử dụng công cụ MPLAB và các gói h ỗ trợ để tổng hợ p và nạp xuống board. Cách debug chƣơng trình bằ ng công cụ MPLAB
1. GIỚ I THIỆU BOARD PIC EXPLORER 16
Hình 1-1. Board PIC Explorer 16 dùng PIC24FJ128GA010 PIC24FJ128 GA010 PIC Explorer 16 là board th ực tập cho phép sinh viên làm quen v ớ i lập trình Vi điều khiển PIC cũng nhƣ thiế t kế các hệ thống từ đơn giản đế n phức tạp. Các thành phần trên board Pic Explorer 16 bao gồm: 1. Vi điều khiển PIC24FJ128GA010 2. Cổng cắm 9V cung cấp điện thế ngõ vào +3.3V và +5V cho board 3. LED báo hiệu nguồn 4. Cổng cắm RS232 5. Bộ cảm biến nhiệt 6. Cổng kết nối USB 7. Khe cắm In-Circuit Debugger (ICD) ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 3
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
8. Nút gạt chọn lựa phần cứng 9. LCD (2 dòng, 16 c ột) 10. Khe cắm PCB để kết nối LCD màu 11. Nút nhấn dùng để reset hoặc dành cho ứng dụng 12. Bộ ngõ vào analog 13. 8 LEDs báo hiệu dành cho ứng dụng 14. Bộ giải mã giải đa hợ p 74HCT4053 15. EEPROM nối tiếp 16. Thạch anh 8 MHz và Real-Time Calendar/ Clock (RTCC) 32.768 KHz 17. Vùng mở rộng cho các ứng dụng 18. Socket cắm vào PCI 19. Giao tiếp vớ i PIC Kit 2 Programmer 20. Giao tiếp JTAG
Hình 1-2. Vị trí các thành ph ần trên board Pic Explorer 16
2. GIỚ I THIỆU CÔNG CỤ LẬP TRÌNH PIC Qui trình lập trình PIC có th ể theo các bƣớ c sau: Xây dựng mã chƣơng trình Biên dịch mã chƣơng trình Nạp mã chƣơng trình xuố ng board thực tập và kiểm tra kết quả
ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 4
Trƣờng Đại Đại Họ Học Khoa Họ Học Tự Tự Nhiên Khoa Điện Điện Tử Tử - Viễ Viễn Thông
Bộ Môn Máy Tính – Tính – H Hệ Th ng Nhún Nhúngg Giáo trình Thực Thực Hành Vi Điều Điều Khiể Khiển
a) Giớ i thiệu công c ụ MPLAB IDE MPLAB IDE là gói công c ụ của hãng Microchip cung c ấp môi trƣờ ng ng cho phép ngƣờ i lập trình xây dựng mã chƣơng trình, biên dị ch, debug và nạp mã chƣơng trình xuống board có sử dụng PIC. Tài liệu này sử dụng MPLAB phiên bản 8.63. b) Giớ i thiệu công c ụ MPLAB C Compiler (mplabc30) for PIC24 MCUs Đây là công cụ biên dịch và liên kết mã chƣơng trình viế t bằng ngôn ngữ C cho các dòng PIC 24. Sinh viên có th ể download công cụ này tại trang web c ủa Microchip. Bài th ực hành này sử dụng phiên bản 3.25.
3. CÁC BƢỚ C LẬP TRÌNH PIC Chuẩn bị: sinh viên cần cài đặt sẵn MPLAB và MPLAB C Compiler for PIC24 MCUs cho PC. a) Tạo project trên MPLAB IDE Bƣớc 1. Khởi động MPLAB Bƣớc 2. Menu Project Project Wizard Next Bƣớc 3. Chọn PIC24FJ128GA010 trong hộp thoại Device Next Bƣớc 4. Lựa chọn Microchip C30 Toolsuite và tr ỏ đƣờ ng ng dẫn tớ i các thành phần trƣơng ứng (thƣ mụ c cài MPLAB C Compiler for PIC24 MCUs) Next
ThS. Nguyễ Nguyễn Quố Quốc Khoa CN. Nguyễn Nguyễn Đức Đức Tiế Tiến
Trang 5
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Hình 1-3. Trỏ tới đƣờ ng dẫn của các thành phần trong Microchip C30 Toolsuite Bƣớc 5. Lựa chọn đƣờ ng dẫn của project và đặ t tên project Next
Hình 1-4. Tạo project tên begin trong đƣờ ng dẫn D:\Exercises\PIC\tut ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 6
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bƣớc 6. Add file liên kết (p24FJ128GA010.gld) Trỏ tớ i file p24FJ128GA010.gld (Thu_muc_cai_dat_mplabc30\ v3.25\support\PIC24F\gld) Add Next. Để tiện cho tạo project sau này, sinh viên nên copy file này vào thƣ mụ c d ễ tìm thấy hơn (ổ đĩa hay đƣờ ng dẫn t ới thƣ mục chứ project).
Hình 1-5 Tr ỏ tớ i file liên k ết Bƣớc 7. Finish Bƣớc 8. Menu File New. Sinh viên có thể xây dựng mã chƣơng trình trong cửa sổ mới này và lƣu với đị nh dạng .c. #include
main() { TRISA = 0; // all PORTA pins output PORTA = 0xff; }
Bảng 1. Chƣơng trình ví dụ kiểm tra chức năng PORT A b) Build project Bƣớc 1. Add mã nguồn vào project Menu View Project click chuột phải vào project Add files… trỏ tớ i file chữa mã chƣơng trình Bƣớc 2. Menu Project Build All hoặc phím Buil All trên Task Bar
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 7
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Hình 1-6. Build Project c) Nạp chƣơng trình xuống PIC Có rất nhiều công cụ hỗ trợ cho việc nạp mã chƣơng trình cho PIC (mạ ch nạp). Bài thực hành này sẽ hƣớ ng dẫn sinh viên sử dụng công cụ MPLAB ICD 2 LE đƣợ c sản xuất bở i hãng Microchip. Qui định bắt buộc khi sử dụng MPLAB ICD 2 LE: Sinh viên phải làm theo trình tự: Cắm MPLAB ICD 2 LE vào PC Cắm MPLAB ICD 2 LE vào board thực tập vớ i mặt hiển thị MPLAB ICD 2 LE quay vào socket c ắm PIC Cấp nguồn từ adapter. Lƣu ý:để có thể sử dụng xuất d ữ liệu PORTA ra led, sinh viên cần t ắt ch ức năng JTAG bằng cách vào menu Configure Configuration bits … bỏ dấu check tại Configuration Bits set in code và ch ọn giá trị JTAG port is disabled.
Hình 1-7. Tắt chức năng JTAG Bƣớc 1. Lựa chọn công cụ ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 8
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Menu Programmer Select Programmer MPLAB ICD 2
Hình 1-8. Lự a chọn công cụ nạp chƣơng trình Bƣớc 2. Kết nối thiết bị Menu Programmer Connect. Board phải đƣợ c cấp nguồn trƣớ c khi kết nối.Sinh viên cần kiểm tra các thông s ố trong cửa sổ output để đảm bảo thiết bị đƣợ c kết nối đúng trƣớ c khi tiếp tục. Bƣớc 3. Nạp mã chƣơng trình xuố ng board thực tập Menu Programmer Program Bƣớc 4. Kiểm tra kết quả Ngắt kết nối giữ a board th ự c tập và MPLAB ICD 2 LE và kiểm tra kết quả chƣơng trình. d) Debug mã chƣơng trình Sinh viên có thể sử dụng MPLAB ICD 2 LE hoặc MPLAB SIM để debug mã chƣơng trình. Để lựa chọn công cụ, sinh viên vào menu Debugger Select Tool MPLAB ICD 2 hay MPLAB SIM. Sinh viên phải kế t h ợ p thêm các ch ức năng chạy từng bƣớ c và các c ửa sổ trong menu View để có kết quả mong muốn. Sinh viên có thể tham khảo thêm trong tài liệu Programming 16-Bit PIC Microcontrollers in C
4. BÀI TẬP Sinh viên thực hiện các bƣớ c trên vớ i những mã chƣơng trình (code) mẫ u sau #include void delayms( unsigned t) {
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 9
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
T1CON = 0x8000; // enable tmr1, Tcy, 1:1 while (t--) { TMR1 = 0; while (TMR1<2000); } } // Delayms main() { TRISA = 0; // all PORTA pins output while(1) { PORTA = 0xff; delayms(500); PORTA = 0; delayms(500); } } #include void delayms( unsigned t) { T1CON = 0x8000; // enable tmr1, Tcy, 1:1 while (t--) { TMR1 = 0; while (TMR1<2000); } } // Delayms main() { TRISA = 0; // all PORTA pins output int i; i = 1; while(1) { PORTA = i; delayms(500); i=i << 1; if(i==16) i = 0x1; } }
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 10
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 2.
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
GIAO TIẾP I/O ĐƠN GIẢN
MỤC ĐÍCH Bài thực hành giúp sinh viên làm quen v ớ i các giao ti ếp I/O đơn giả n (Led, nút nhấn) trên board PIC Explorer 16.
1. TỔNG QUAN a) Mối liên hệ giữ a các port trong PIC và giao ti ếp I/O trên board Trong giớ i hạn bài thực hành này, sinh viên ch ỉ tìm hiểu hai PORT là Port A và D. Các LEDs đƣợ c nối vào 7 bits thấp của port A. Port A có 16 chân g ồm PIN_A0, PIN_A1, …, PIN_A15, trong đó PIN_A7 đến PIN_A0 đƣợ c n ối vớ i 8 LEDs. Các switches từ SW3 đến SW6 đƣợ c nối vào các chân PIN_D6, PIN_D13, PIN_A7 và PIN_D7 theo đúng thứ tự. Các switches tác độ ng mức thấp (khi nhấn vào bằng 0, khi thả ra bằng 1)
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 11
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
b) Khở i tạo port
Hình 2-1. Sơ đồ của một Port I/O điể n hình của Pic24 Theo sơ đồ trên, chúng ta có thể thấy có nhiều chức năng ngoại vi đƣợc đa hợ p trên một port. Ngƣờ i sử dụng có thể qui ƣớc hƣớ ng dữ liệu trên port thông qua việc cấu hình các thanh ghi thích h ợ p. Trong giớ i hạn bài thực hành này, sinh viên chỉ quan tâm đến hai port A và D. V ới hai port này, thanh ghi đƣợ c sử dụng để qui ƣớ c chiều dữ liệu là TRISA và TRISD. Từng bit trong thanh ghi TRIS qui đị nh chiều dữ liệu cho từng bit trên Port. Dữ liệu sẽ là output nếu bit tƣơng ứng trong thanh ghi TRIS đƣợ c thiết lập giá trị 0 và ngƣợ c lại.
2. CHƢƠNG TRÌNH MẪU Sinh viên tham khảo một số chƣơng trình mẫ u sau a) Sáng 4 led #include main()
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 12
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
{ TRISA = 0; // all PORTA pins output PORTA = 0x0f; }
b) Led đếm lên mỗi khi nhấn SW3 #include #define DELAY 1000 void delay() { T1CON = 0x8030; TMR1 = 0; while ( TMR1 < DELAY); TMR1 = 0; } main() { TRISDbits.TRISD6 = 1; TRISA = 0x0; int i = 0; while(1) { if(PORTDbits.RD6 == 0) { delay(); if(PORTDbits.RD6 == 0) i = i+1; } PORTA= i; } }
3. BÀI TẬP BÀI 1. Lập trình để hai led rƣợt đuổ i nhau BÀI 2. Lập trình để hệ thống sáng dần lên mỗi khi SW1 đƣợ c nhấn, hiển thị kết quả ra led. BÀI 3. Viết chƣơng trình sau: khi nhấ n SW3 thì LEDs d ịch từ trái sang phải, SW2 thì LEDs dịch từ phải sang trái.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 13
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 3.
TIMER
MỤC ĐÍCH Bài thực hành giúp sinh viên hi ểu cấu trúc của các bộ định thờ i (Timer) trong PIC 24F và xây dựng các ứng dụng liên quan đến đị nh thờ i.
1. TỔNG QUAN VỀ TIMER TRÊN PIC 24F a) Giớ i thiệu về Timer Vi điều khiển PIC24FJ128GA010 gồm năm bộ Timer: Timer1, Timer2, Timer3, Timer4 và Timer5. M ỗi Timer là b ộ định thời/ đếm 16-bits gồm nhiều thanh ghi có khả năng đọc và ghi: TMRx: Thanh ghi đế m Timer 16 bits PRx: Thanh ghi chu kì Timer 16 bits TxCON: Thanh ghi điề u khiển Timer 16 bits Từng Timer có các bits điề u khiển ngắt riêng biệt Interrupt Enable Control bit (TxIE): bit điề u khiển cho phép ngắt hoạt động Interrupt Flag Status bit (TxIF): bit c ờ trạng thái của ngắt Interrupt Priority Control bits (TxIP<2:0>): bit điề u khiển ƣu tiên ngắt
b) Các loại Timer Các Timers đƣợ c chia thành ba lo ại: loại A, loại B và loại C. Một vài Timers 16bit có thể kết hợ p với nhau để tạo thành Timers 32-bit. i. Timer loại A Timer1 thu ộc loại A. Nó có thể hoạt động với dao động công suất thấp 32 KHz hoặc ở chế độ Asynchronous mode vớ i clock c ấp từ ngoài vào. Thanh ghi điều khiển TxCON
Hình 3-1. Thanh ghi TxCON lo ại A Các bit trong thanh ghi TxCON lo ại A
Bit 15 ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
TON: Timerx On bit Trang 14
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
1 = Timer bắt đầu hoạt động 0 = Timer ngừng hoạt động Không sử dụng, xem nhƣ 0 TSIDL: Stop in Idle Mode bit 1 = Timer ngừng hoạt động khi thiết bị ở chế độ Idle 0 = Timer tiếp tục hoạt động ở chế độ Idle Không sử dụng, xem nhƣ 0 TGATE: Timerx Gated Time Accumulation Enable bit Khi TCS = 1: bit này bị bỏ qua Khi TCS = 0: 1 = cho phép gated time accumulation 0 = không cho phép gated time accumulation TCKSP<1:0>: Timerx Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value Không sử dụng, xem nhƣ 0 TSYNC: Timerx External Clock Input Synchronization Select bit Khi TCS = 1: 1 = Đồng bộ vớ i clock bên ngoài cấp vào 0 = Không đồng bộ vớ i clock bên ngoài cấp vào Khi TCS = 0: Bit này bị bỏ qua (xem nhƣ là 0). Timerx sử dụng clock trong khi TCS =0 TCS: Timerx Clock Source Select bit 1 = Clock ngoài từ chân TxCK 0 = Clock trong (FOSC/2) Không sử dụng, xem nhƣ 0
Bit 14 Bit 13 Bit 12 – 7 Bit 6
Bit 5 – 4
Bit 3 Bit 2
Bit 1 Bit 0
Bảng 2. Ý nghĩa các bit trong thanh ghi TxCON loạ i A ii. Timer loại B Timer2 và Timer4 thu ộc loại B. Timer lo ại B có thể ghép vớ i Timer loại C tạo thành Timer 32 bits. Khi này, thanh ghi TxCON c ủa Timer loại B phát tín hi ệu điều khiển T32 cho phép ho ạt động ở chế độ 32 bits.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 15
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Thanh ghi điều khiển TxCON
Hình 3-2. Thanh TxCON loại B Các bit trong thanh ghi TxCON lo ại B
Bit 15
Bit 14 Bit 13 Bit 12 – 7 Bit 6
Bit 5 – 4
Bit 3 Bit 2 Bit 1
TON: Timerx On bit Khi T32 = 1 (ở chế độ Timer 32 bits) 1 = Bắt đầu hoạt động cặp Timer TMRx:TMRy 0 = Ngừng hoạt động cặp Timer TMRx:TMRy Khi T32 = 0 (ở chế độ Timer 16 bits) 1 = Bắt đầu hoạt động Timer 16 bits 0 = Ngừng hoạt động Timer 16 bits Không sử dụng, xem nhƣ 0 TSIDL: Stop in Idle Mode bit 1 = Timer ngừng hoạt động khi thiết bị ở chế độ Idle 0 = Timer tiếp tục hoạt động ở chế độ Idle Không sử dụng, xem nhƣ 0 TGATE: Timerx Gated Time Accumulation Enable bit Khi TCS = 1: bit này bị bỏ qua Khi TCS = 0: 1 = cho phép gated time accumulation 0 = không cho phép gated time accumulation TCKSP<1:0>: Timerx Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value T32: 32-Bit Timerx Mode Select bit 1 = TMRx và TMRy đƣợ c cấu hình nhƣ Timer 32 bits 0 = TMRx và TMRy đƣợ c cấu hình nhƣ các Timer 16 bits độc lập Không sử dụng, xem nhƣ 0 TCS: Timerx Clock Source Select bit 1 = Clock ngoài từ chân TxCK 0 = Clock trong (FOSC/2)
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 16
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bit 0
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Không sử dụng, xem nhƣ 0
Bảng 3. Các bit trong thanh ghi TxCON lo ại B iii. Timer loại C Timer3 và Timer5 thu ộc loại C. Timer lo ại C đƣợ c ghép vớ i Timer loại B tạo thành Timer 32 bits. Ngoài ra, Timer lo ại C còn dùng để tạo trigger cho quá trình chuyển đổi tƣơng tự sang số (ADC). Thanh ghi điều khiển TxCON
Hình 3-3. Thanh ghi TxCON c ủa Timer loại C Các bit trong thanh ghi TxCON c ủa timer loại C
Bit 15 Bit 14 Bit 13 Bit 12 – 7 Bit 6
Bit 5 – 4
Bit 3 – 2 Bit 1 Bit 0
TON: Timery On bit 1 = Bắt đầu hoạt động Timery 16 bits 0 = Ngừng hoạt động Timery 16 bits Không sử dụng, xem nhƣ 0 TSIDL: Stop in Idle Mode bit 1 = Timer ngừng hoạt động khi thiết bị ở chế độ Idle 0 = Timer tiếp tục hoạt động ở chế độ Idle Không sử dụng, xem nhƣ 0 TGATE: Timery Gated Time Accumulation Enable bit Khi TCS = 1: bit này bị bỏ qua Khi TCS = 0: 1 = cho phép gated time accumulation 0 = không cho phép gated time accumulation TCKSP<1:0>: Timerx Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value Không sử dụng, xem nhƣ 0 TCS: Timery Clock Source Select bit 1 = Clock ngoài từ chân TxCK 0 = Clock trong (FOSC/2) Không sử dụng, xem nhƣ 0
Bảng 4. Các bit trong thanh ghi TxCON c ủa Timer loại C ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 17
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Lƣu ý: Khi chế độ 32 bits đƣợ c kích hoạt (TxCON<3> = 1), các bits này không tác động đến hoạt động c ủa Timer; tất cả chức năng đƣợ c thiết lập thông qua các bit trong thanh ghi TxCON của các Timer lo ại B.
c) Các chế độ hoạt động Các chế độ hoạt động của Timer: Định thờ i Bộ đếm đồng bộ (Synchronous counter) sử dụng clock ngoài Gated timer Bộ đếm không đồng bộ (Asynchronous counter) Chế độ Timer đƣợ c cấu hình thông qua các bit sau: TCS (TxCON<1>): Timer Clock Source Control bit TSYNC (TxCON<2>): Timer Synchronization Control bit (ch ỉ dành riêng loại A) TGATE (TxCON<6>): Timer Gate Control bit i. Chế độ định thờ i Tất c ả các loại Timer đề u có thể hoạt động ở chế độ định thờ i. Trong chế độ này, xung ngõ vào cho bộ đếm đƣợ c cung cấp bở i xung của hệ thống (Fosc/2). Khi hoạt động, bộ đếm sẽ tăng một lần trong n chu kỳ lệnh nếu prescale thiết lập là 1:n. Chế độ định thời đƣợ c lựa chọn bằng cách xóa bit TCS (TxCON<1>). Công thứ c tính thời gian đị nh thờ i:
Trong đó,
Tdelay: thời gian định thờ i M : t ốc độ xử lý l ệnh c ủa PIC,
ví dụ PIC 24F có thể xử lý 4 triệu l ệnh/s ở 8
MHz M = 4,000,000. DELAY : tham số ngƣờ i dùng tự định nghĩa ii. Bộ đếm đồng bộ (Synchronous counter) s ử dụng clock ngoài Khi bit TCS đƣợ c set lên 1, clock c ủa timer đƣợ c cấp từ bên ngoài và b ộ đếm trong timer sẽ tăng một lần tại mỗi cạnh lên của chân TxCK. Xung clock ngoại phải thỏa các yêu c ầu về thờ i gian mức cao và thờ i gian mức thấp khi đƣợ c sử dụng trong chế độ đếm đồng bộ. Sinh viên có th ể tham khảo thêm tài liệu 24F Timers Reference Chapter 39704a trong PIC24F Family Reference Manual iii. Chế độ Gated Timer Chế độ này cho phép bộ đếm của timer tăng dự a trên thờ i gian ở mức cao của chân TxCK. Trong chế độ này, timer sử dụng clock nội (Fosc/2). Khi chân TxCK ở ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 18
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
mức cao, bộ đếm sẽ đếm lên cho đế n khi chân TxCK chuy ển trạng thái xuống mức 0. Ngắt có thể xảy tại thời điể m này (chân TxCK chuy ển tr ạng thái t ừ cao xuống thấp). Để Timer có thể hoạt động trong chế độ này, các bit sau đây phải đƣợ c set giá tr ị phù hợ p: TGATE (TxCON<6>) = 1, TON (TxCON<15>) = 1 và TCS (TxCON<1>) = 0. iv. Bộ đếm bất đồng bộ Chỉ có Timer lo ại A có khả năng hoạt độ ng ở chế độ đếm bất đồng bộ sử dụng xung clock áp vào chân TxCK. B ộ đếm sẽ tăng bất đồ ng bộ vớ i clock nội. Chế độ này có một số ƣu điểm: Timer có thể hoạt động trong chế độ Sleep và có thể sinh ra ngắt để khôi phục hệ thống từ chế độ Sleep theo th ời gian đã thiế t lập. Timer có thể sử dụng nguồn dao động 32 KHz v. Hoạt động của timer vớ i clock ngoại có tần số lớ n Trong trƣờ ng hợp ngƣờ i lập trình muốn sử dụng timer vớ i clock ngoại có tần số lớ n, các timer loại A và B s ẽ thích hợ p nhất vì việc đồng bộ của các timer này x ảy ra sau mạch prescaler.
d) Ngắt Timer Timer 16 bit có kh ả năng sinh ra ngắt (bit TxIF set lên 1) nếu đƣợ c cho phép và một trong những sự kiện: Bộ đếm đạt một giá trị đƣợ c thiết lập trong thanh ghi period (PRx) và timer không hoạt động trong chế độ Gated Timer. Có một cạnh xuống xảy ra tại chân TxCK khi timer ho ạt động trong chế độ Gated timer. Bit TxIF phải đƣợ c xóa bở i phần mềm. Để cho phép Timer sinh ra ngắt, bit Timer Interrupt Enable (TxIE) ph ải đƣợ c bật lên 1 đồng thờ i giá trị ƣu tiên ngắt (đƣợ c thiết lập qua các bit TxIP<2:0>) ph ải khác 0.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 19
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Hình 3-4. Ví dụ ngắt Timer e) Prescale Giá trị này qui định tỷ lệ số chu kỳ lệnh so vớ i số lần tăng của bộ đếm trong timer. Ví dụ, khi thiết lập prescale là 1:4 thì sau 4 chu k ỳ lệnh, bộ đếm trong timer sẽ tăng một giá trị. Với PIC 24F, ngƣờ i lập trình có thể lựa chọn một trong 4 giá trị cho prescale: 1:1, 1:8, 1:64 và 1:256. Giá trị prescale sẽ bị xóa trong các trƣờ ng hợ p sau: Ghi giá trị xuống thanh ghi TMRx Xóa bit TON Thiết bị reset
f) Cấu hình Timer 32 bit Timer loại B và C có thể kết hợp để tạo thành timer 32 bit. Timer lo ại C sẽ trở thành most significant word (msw) và timer lo ại B sẽ trở thành least significant word (lsw). Trong timer 32 bit, những bit điều khiển loại B sẽ điều khiển hoạt động của timer. Bit điều khiển c ủa timer loại C không có ý nghĩa. Ngƣợ c l ại, việc điều khiển ngắt của timer 32 bit đƣợ c thiết lập qua các bit điề u khiển ngắt loại C, các bit điề u khiển ngắt loại B không có tác d ụng. Sinh viên có th ể tham khảo thêm trong tài liệu 24F Timers Reference Chapter 39704a
2. BÀI TẬP Bài mẫ u
Lập trình để các led trên PORTA ch ớ p tắt theo chu kỳ 1 s sử dụng timer 1 ở chế độ định thờ i. Chương trình mẫ u ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 20
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
#include #define DELAY 4000 void delay_ms(int t) { TMR1 = 0; T1CON = 0x8000; while(t--) { while(TMR1
Lưu ý: để timer có thể chạy đúng theo yêu cầ u, sinh viên cần thiết lập dao động trên MPLAB bằng cách vào menu Configure Configure bits… Bỏ dấu check tại Configuration Bits set in code thiết lập các giá tr ị theo hình sau:
Hình 3-5. Thiết lập Configuration Bit cho Timer
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 21
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
BÀI 1. Lập trình để hệ thống đế m lên sau 500 ms s ử dụng Timer 2 ở chế độ định thờ i, xuất kết quả ra led. BÀI 2. Lập trình để hệ thống thỏa mãn yêu c ầu sau: Khi nhấn SW3 1 l ần thì LED7 chớ p tốc độ 1s, nhấn 2 lần thì chớ p tốc độ s, …, nhấn 8 lần thì chớ p tốc độ s, nếu nhấn 9 lần thì quay lại trạng thái ban đầ u.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 22
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 4.
NGẮT
MỤC ĐÍCH Bài thực hành giúp sinh viên tìm hi ểu cơ chế ngắt, cách cấu hình ngắt trên PIC 24F và xây dựng các ứng dụng ngắt liên quan đế n nút nhấn và Timer.
1. TỔNG QUAN VỀ NGẮT TRÊN PIC 24F a) Giớ i thiệu Module điều khiển ngắt trên PIC 24F giảm số lƣợ ng tín hiệu yêu cầu ngắt tớ i CPU xuống còn 1 tín hiệu. Module điều khiển ngắt trên PIC 24F có nh ững đặc điể m sau: Tối đa 8 ngoại lệ (processor exception) và bẫy phần mềm (software trap). Ngƣờ i dùng có thể lựa chọn 7 mức ƣu tiên. Bảng vector ngắt tối đa 118 vectors Bảng vector ngắt thay thế (Alternate Interrupt Vector Table – AIVT) hỗ trợ việc debug
b) Bảng vector ngắt Một phần vector ngắt PIC 24F đƣợc định nghĩa trong MPLAB C Compiler theo bảng sau. Những vector ngắt khác (_Interrupt69 _Interrupt117) hiện vẫn chƣa đƣợ c sử dụng.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 23
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Bảng 5. Vector ngắt PIC 24F đƣợc định nghĩa trong MPLAB C Compiler (Phần 1)
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 24
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Bảng 6. Vector ngắt PIC 24F đƣợc định nghĩa trong MPLAB C Compiler (Phần 2) ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 25
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Mỗi nguồn ngắt đƣợc điều khiển bởi 5 bit điề u khiển n ằm ở nhiều thanh ghi khác nhau: Bit Interrupt Enable (tên các bit này thƣờ ng có hậu t ố -IE): khi bật lên 1, bit này cho phép ngu ồn ngắt sinh ra ngắt. Bit Interrupt Flag (tên các bit này thƣờ ng có hậu t ố -IF): bit này đƣợ c set mỗi khi một sự kiện có thể gây ngắt xảy ra. Bit này không ph ụ thuộc vào bit Interrupt Enable. Lƣu ý: bit này phải đƣợ c xóa trong hàm phục vụ ngắt. Các bit qui đị nh mức ƣu tiên (tên các bit này thƣờ ng có hậu tố -IP): ba bit này qui định mức ƣu tiên cho mộ t ngắt. Giá trị ƣu tiên từ 0 7. Trong hai ngắt xảy ra đồng thờ i, ngắt nào có m ức ƣu tiên cao hơn sẽ đƣợ c phục vụ trƣớ c. Tại thời điểm thiết bị khởi động, mỗi ngắt sẽ có mức ƣu tiên mặ c định là 4.
c) Ngắt chồng (Nesting of interrupts): Một ngắt có mức ƣu tiên thấ p có thể bị ngắt b ở i một ngắt có mức ƣu tiên cao hơn. Đặc điể m này có thể kiểm soát bằng bit NSTDIS trong thanh ghi INTCON1. Khi bit này đƣợ c set, CPU sẽ phục v ụ một ngắt trƣớ c khi phục vụ ngắt khác, bất ch ấp ngắt xảy ra sau có mức ƣu tiên cao hơn ngắt CPU đang phụ c vụ. Nói cách khác, khi bit này đƣợ c set, ngắt chồng không xảy ra.
2. CÁC BƢỚ C XÂY DỰ NG Ứ NG DỤNG LIÊN QUAN ĐẾN NGẮT a) Thiết lập ngắt Để một nguồn có thể sinh ra ngắt, ngƣờ i lập trình phải có những thiết lập nhất định (có thể theo thứ tự sau): qui định mức ƣu tiên n gắt xóa cờ ngắt cho phép ngắt xây dựng chƣơng trình phụ c vụ ngắt. Để tác động vào các bit điề u khiển ng ắt, sinh viên có th ể sử dụng tên các bit theo MPLAB C Compiler. Tên bit = tên ngắt (primary name trong b ảng Vector ngắt b ỏ đi từ “Interrupt”)+ hậu tố (IE, IF, IP). Ví dụ, các bit điề u khiển ngắt Timer1: _T1IF (cờ ngắt), _T1IE (cho phép ngắt) và _T1IP (mức ƣu tiên ngắ t). b) Xây dự ng hàm phục vụ ngắt Một số yêu cầu vớ i hàm phục vụ ngắt: Không có tham số và kiểu trả về là void Không gọi hàm phục vụ ngắt trong chƣơng trình chính Hàm phục vụ ngắt không nên gọi các hàm khác.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 26
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Cú pháp của hàm phục vụ ngắt: void __attribute__ (( interrupt)) Interrupt_name ( void) { // interrupt service routine code here... }
Vớ i Interrupt_name chính là primary name trong b ảng Vector ngắt. Ví dụ: chƣơng trình phục vụ ngắt cho timer1: void __attribute__ (( interrupt)) _T1Interrupt ( void) { // interrupt service routine code here...
_T1IF = 0; } // _InterruptVector
Ngƣờ i lập trình có thể sử dụng cú pháp sau vớ i các hàm ngắt đơn giản: void __ISR Interrupt_name ( void) { // interrupt service routine code here... }
Lƣu ý:Sinh viên phải xóa cờ ngắt trong hàm x ử lý ngắt.
3. BÀI TẬP BÀI 1. Lập trình để hệ thống đếm lên sau 0.5 s, xu ất kết quả ra led, sinh viên phải sử dụng ngắt timer. Hướ ng d ẫn : Sinh viên c ần tính toán giá tr ị cho thanh ghi PR và c ấ u hình ỳ ngắ t c ủa timer có thể tính theo Timer phù hợp trướ c khi thiế t l ậ p ng ắ t.Chu k công thứ sau:
Khung mã chương trình: #include<…>
void _ISR _T1Interrupt(void) {
… _T1IF = 0; } main()
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 27
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
{ _T1IP = …; TMR1 = 0; PR1 = 25000-1; T1CON = …; _T1IF = …; //Xoa co ngat _T1IE = …; // Cho phep ngat … //your main code }
BÀI 2. Viết chƣơng trình led dị ch phải mỗi khi nhấn Switch 6. Hướ ng d ẫ n: ngắ t Switch nố i v ớ i PORTD thuộc loại ngắ t Change Notification (_CNInterrupt). Các Switch S3, S4, S6 đượ c nố i vớ i các ngắ t Change Notification CN15, CN19 và CN16 . Để cho phép ngắ t sinh ra t ừ các nguồn g nguồn có tiề n t ố này, sinh viên cần bật hai bit: bit cho phép ng ắ t của t ừn _CNx, vớ i x = 15, 16, 19(_CN15IE, _CN16IE, _CN19IE) và bit cho phép ng ắ t Change Notification toàn c ục _CNIE. T ấ t các các ngắ t sinh ra t ừ nhữ ng nguồn này sử d ụng chung các bit điề u khiể n ngắ t khác: _CNIF,_CNIP. BÀI 3. Viết chƣơng trì nh led dịch phải mỗi khi nhấn Switch 6 và dịch trái khi nhấn Switch 3.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 28
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 5.
ADC
MỤC ĐÍCH Bài thực hành giúp sinh viên làm quen v ớ i khái niệm ADC, tìm hiểu cấu trúc và cách cấu hình bộ ADC trên PIC 24F và xây d ựng các ứng dụng liên quan đế n ADC trên board thực tập.
1. TỔNG QUAN VỀ ADC TRÊN PIC 24F Vi điều khiển PIC24F gồm một bộ ADC có nhiệm vụ chuyển đổi tín hiệu tƣơng tự sang dữ liệu số 16-bit. Bộ ADC gồm 16 ngõ vào tƣơng tự từ AN0 đến AN15 mô tả nhƣ Hình 5-1.
Hình 5-1. Cấu trúc bộADC trên PIC 24F ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 29
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trên board PIC Explorer 16 , có hai tín hiệu có thể làm ngõ vào của ADC là biến trở 10 K (nối vớ i AN5) và cảm biến nhiệt độ TC1047A (nối vớ i AN4). a) Các thanh ghi c ủa ADC trên PIC 24F Module ADC trên PIC 24F có 22 thanh ghi. T ất cả các thanh ghi đƣợ c map vào vùng nhớ dữ liệu. i. Thanh ghi điề u khiển Module gồm 6 thanh ghi điề u khiển và trạng thái: AD1CON1, AD1CON2, AD1CON3: các thanh ghi điề u khiển AD1CHS: thanh ghi lựa chọn kênh ADC AD1PCFG: thanh ghi cấu hình port ADC AD1CSSL: thanh ghi lựa chọn chế độ scan ngõ vào ADC Các thanh ghi AD1CON1, AD1CON2, AD1CON3 điều khiển hoạt động chung của ADC: bật ADC, cấu hình xung chuyển đổi và nguồn tham chiếu, lựa chọn nguồn kích lấy mẫu và chuyển đổi và cho phép ngƣời dùng điề u khiển chuỗi lấy mẫu/chuyển đổi. Thanh ghi AD1CHS cho phép l ựa ch ọn ngõ nào đƣợ c n ối vớ i b ộ khuếch đại S/H, lựa chọn bộ đa hợ p và nguồn tham chiếu cho việc lấy mẫu vi phân (differential sampling). Thanh ghi AD1PCFG cấu hình chân I/O là ngõ vào tƣơng tự hay số. Thanh ghi AD1CSSL lựa chọn kênh trong chu ỗi kênh đƣợ c scan. ii. Bộ đệm kết quả Module ADC tích hợ p RAM 16 word d ữ liệu ký hiệu gọi là ADC1BUF để lƣu trữ kết quả chuyển đổi. 16 vị trí đệm đƣợ c ký hiệu ADC1BUF0 ADC1BUFF. Các vị trí đều đƣợ c map vào vùng nh ớ dữ liệu và có thể định địa chỉ độc lập nhau. Vùng đệm kết quả không cho phép ghi d ữ liệu. Thanh ghi AD1CON1:
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 30
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bit 15 14 13 1210 98
75
43 2
1 0
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Mô tả ADON: A/D Operating Mode bit 1: cho phép ADC ho ạt động 0: tắt ADC Không có ý nghĩa ADSIDL: Stop in Idle Mode bit 1: tắt module ADC khi CPU ở chế độ Sleep 0: cho phép ADC ho ạt động khi CPU ở chế độ Sleep Không có ý nghĩa FORM1:FORM0: Data Output Format bits 11: dạng thập phân có dấu (sddd dddd dd00 0000) 10: dạng thập phân không dấu (dddd dddd dd00 0000) 01: số nguyên có dấu (ssss sssd dddd dddd) 00: số nguyên (0000 00dd dddd dddd) SSRC2:SSRC0: Conversion Trigger Source Select bits 111: bộ đếm nội kết quá trình lấy mẫu và bắt đầu chuyển đổi (tự động) 110: chƣa đƣợ c sử dụng 10x: chƣa đƣợ c sử dụng 100: chƣa đƣợ c sử dụng 011: Timer3 kết thúc quá trình lấy mẫu và bắt đầu quá trình chuyển đổi 001: sự thay đổi trạng thái trên chân ngắt ngoài INT0 kết thúc quá trình lấy mẫu và bắt đầu quá trình chuy ển đổi 000: việc xóa bit SAMP kết thúc quá trình l ấy mẫu và bắt đầu quá trình chuyển đổi Không có ý nghĩa ASAM: A/D Sample Auto-Start bit 1: giai đoạn lấy mẫu bắt đầu tự động sau khi giai đoạ n chuyển đổ i trƣớ c kết thúc, bit SAMP đƣợ c set tự động 0: giai đoạn lấy mẫu bắt đầu khi bit SAMP đƣợ c set SAMP: A/D Sample Enable bit 1: ít nhất một bộ khuếch đại S/H (sample/hold) đang lấy mẫu 0: Bộ khuếch đại S/H đang giữ mẫu DONE 1: quá trình chuyển đổi kết thúc 0: quá trình chuyển đổi chƣa kế t thúc hoặc chƣa bắt đầ u
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 31
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Thanh ghi AD1CON2:
Bit Mô tả 1513 VCFG2:VCFG0: cấu hình điệ n thế tham chiếu
12 11 10 98 7
6 52
1
Chƣa đƣợ c sử dụng Không có ý nghĩa CSCNA: thiết lập chế độ scan ngõ vào cho bộ đa hợ p A 1: bật chế độ scan 0: tắt chế độ scan Không có ý nghĩa BUFS: Buffer Fill Status bit 1: dữ liệu đang đƣợc làm đầ y ở ADC1BUF8-ADC1BUFF, ngƣờ i dùng nên truy xuất dữ liệu từ ADC1BUF0-ADC1BUF7 0: dữ liệu đang đƣợc làm đầ y ở ADC1BUF0-ADC1BUF7, ngƣờ i dùng nên truy xuất dữ liệu từ ADC1BUF8-ADC1BUFF Không có ý nghĩa SMPI3:SMPI0: số lƣợ ng chuỗi lấy mẫu/chuyển đổi trong một lần sinh ngắt 1111: ngắt sau khi hoàn thành 16 chu ỗi lấy mẫu/chuyển đổi 1110: ngắt sau khi hoàn thành 15 chu ỗi lấy mẫu/chuyển đổi … 0001: ngắt sau khi hoàn thành 2 chu ỗi lấy mẫu/chuyển đổi 0000: ngắt sau khi hoàn thành 1 chu ỗi lấy mẫu/chuyển đổi BUFM: Buffer Mode Select bit 1: bộ đệm đƣợ c chia thành 2 b ộ đệm 8 word: (ADC1BUF0 ADC1BUF7 và ADC1BUF8 ADC1BUFF)
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 32
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
0: bộ đệm đƣợ c cấu hình thành một bộ đệm 16 word (ADC1BUF0 ADC1BUFF) 0 ALTS: Alternate Input Sample Mode Select bit 1: Chọn bộ đa hợ p A cho mẫu đầu tiên và thay đổ i giữa bộ đa hợ p B và A trong những mẫu tiếp theo 0: luôn luôn lựa chọn bộ đa hợ p A Thanh ghi AD1CON3
Bit 15
Mô tả ADRC: A/D Conversion Clock Source bit 1: ADC sử dụng xung từ bộ RC nội 0: ADC sử dụng xung clock hệ thống 1413 Không có ý nghĩa 128 SAMC4:SAMC0: Auto-Sample Time bits 1111: 31 TAD 1110: 30 TAD … 0001: 1 TAD 0000: 0 TAD 70 ADCS7:ADCS0: A/D Conversion Clock Select bits 11111111: 128TCY 11111110: 127TCY … 00000001: 2TCY 00000000: 1TCY
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 33
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Thanh ghi AD1CHS:
Mô tả CH0NB: lựa chọn cực âm của kênh 0 cho bộ đa hợ p B 1: cực âm là AN1 0: cực âm là VR1412 Không có ý nghĩa 118 CH0SB3:CH0SB0: lựa chọn cực dƣơng của kênh 0 cho b ộ đa hợ p B 1111: cực dƣơng là AN15 1114: cực dƣơng là AN14 … 0001: cực dƣơng là AN1 000: cực dƣơng là AN0 7 CH0NA: lựa chọn cực âm của kênh 0 cho b ộ đa hợ p A 1: cực âm là AN1 0: cực âm là VR64 Không có ý nghĩa 30 CH0SA3:CH0SA0: lựa chọn cực dƣơng củ a kênh 0 cho bộ đa hợ p A 1111: cực dƣơng là AN15 1114: cực dƣơng là AN14 … 0001: cực dƣơng là AN1 000: cực dƣơng là AN0 Bit 15
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 34
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Thanh ghi AD1PCFG
Bit Mô tả 150 PCFG15:PCFG0: Analog Input Pin Configuration Control bits 1: chân tƣơng ứng đƣợ c cấu hình là ngõ vào Digital; có thể đọc giá trị từ port, các ngõ vào b ộ đa hợp đƣợ c nối vớ i AVSS 0: chân tƣơng ứng đƣợ c cấu hình là ngõ vào Analog; giá tr ị đọc từ port không có ý nghĩa, ADC lấ y mẫu trên các chân này Thanh ghi AD1CSSL
Bit Mô tả 150 CSSL15:CSSL0: A/D Input Channel Scan Selection bits 1: kênh ANxx tƣơng ứng đƣợc đƣa vào chuỗ i scan ở bộ đa hợ p A 0: kênh ANxx tƣơng ứ ng bị bỏ qua khi scan
b) Cấu hình ADC Sinh viên nên tuân thủ các bƣớc sau để cấu hình ADC trên PIC 24F i. Cấu hình module ADC Lựa chọn nguồn điện thế tham chiếu phù hợ p vớ i khoảng điện thế của tín hiệu analog
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 35
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Lựa chọn xung clock chuyển đổi để tƣơng thích vớ i tốc độ dữ liệu Thiết lập thông số cho giai đoạn lấy mẫu Xác định ngõ vào kết nối vớ i kênh S/H Lựa chọn chuỗi lấy mẫu/chuyển đổi mong mu ốn Cấu hình bộ đệm lƣu dữ liệu Lựa chọn chu kỳ sinh ngắt Bật module ADC ii. Cấu hình ngắt (nếu có) Xóa cờ ngắt AD1IF Thiết lập mức ƣu tiên Sinh viên có th ể tham khả o thêm tài liệu 24F ADC Reference Chapter 39705a
trong PIC24F Family Reference Manual
2. CHƢƠNG TRÌNH MẪU Lập trình điề u khiển led dịch bằng biến trở sử dụng ngắt ADC. #include #define AN_VOLT_PIN AD1PCFGbits.PCFG5//voltage input on AN5 #define ADC_VOLTAGE 5 void adc_init() { AD1CON1 = 0x80E4; AD1CON2 = 0; AD1CON3 = 0x1F05; AD1CHS = ADC_VOLTAGE; AN_VOLT_PIN = 0; AD1CSSL = 0; _AD1IE = 1; _AD1IP = 4; _AD1IF = 0; } void _ISR _ADC1Interrupt(void) { int a; a= ADC1BUF0 >>7; PORTA = (0x80 >> a); _AD1IF = 0; } main() { TRISA = 0xff00; adc_init(); while(1);
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 36
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
}
3. BÀI TẬP BÀI 1. Lập trình để hệ thống đọc giá trị điện thế ở ngõ ra của biến trở và hiển thị kết quả ra led sử dụng ngắt ADC. Hướ ng d ẫ n: gía tr ị thự c của điện thế ở ngõ ra của biế n tr ở đượ c tính theo công thứ c: V = ADC1BUF * (V ref+ - V ref-)/1024
BÀI 2. Lập trình để hệ thống đọc giá tr ị tại ngõ ra của cảm biến nhiệt và hiển thị kết quả trên led. Hướ ng d ẫ n: cảm biế n nhiệt độ trên board PIC Explorer 16 là TC1047A, ngõ ra của cảm biến đượ c nố i vớ i chân AN4. M ố i liên hệ giữa điện thế ngõ ra và nhiệt độ môi trường đượ c biể u diễ n theo hàm sau: Vout = 0.01T + 0.5 (V) 0 V ớ i T là nhiệt độ môi trườ ng đơn vị C. T = 100Vout – 50 (1) Giá tr ị Vout có thể tính đượ c t ừ giá tr ị đọc đượ c t ừ bộ đệm của ADC theo công thứ c: Vout = ADC1BUF * (V ref+ - V ref-)/1024 (2) Thay (2) vào (1), ta có được đẳ ng thứ c liên hệ giữ a T và giá tr ị đọc đượ c t ừ bộ đệm ADC: ( )
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 37
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 6.
GIAO TIẾP LCD
MỤC ĐÍCH Bài thực hành giúp sinh viên làm quen v ớ i bộ điều khiển trên LCD và giao ti ếp Parallel Master Port (PMP) trên PIC 24F.
1. GIỚ I THIỆU LCD TRÊN BOARD PIC EXPLORER 16 Thông thƣờ ng, board PIC Explorer 16 có tích h ợ p s ẵn một màn hình 2 dòng x 16 ký tự và module LCD tƣơng thích vớ i nh ững bộ điều khiển HD44780 theo chuẩn công nghiệp.
Hình 6-1. Kết nối các module LCD trên board PIC Explorer 16 Ký tự đƣợ c hiển thị trên màn hình đƣợ c sinh ra b ở i một bảng sinh ký tự đƣợ c tích hợ p bên trong ROM của bộ điều khiển. Bảng sinh ký tự có thể sinh tập ký tự ASCII và một số ký tự tiếng Nhật. Ngoài ra, ngƣờ i dùng có thể tự định nghĩa thêm một số ký tự (tối đa 8 ký tự tùy loại).
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 38
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Hình 6-2. Bảng sinh ký t ự đƣợ c sử dụng bở i các bộ điều khiển tƣơng thích HD44780 Các lcd có bộ điều khiển tƣơng thích HD44780 chỉ dùng hai thanh ghi (có th ể định địa chỉ độc lập): một cho dữ liệu và một cho lệnh. Tập lệnh sau đây có thể sử dụng để thiết lập và điều khiển hiển thị trên lcd: Mã lệnh
Lệnh RS
R/ DB DB DB DB DB DB DB DB W 7 6 5 4 3 2 1 0
Clear display
0
0
0
0
0
0
0
0
0
1
Cursor home
0
0
0
0
0
0
0
0
1
*
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Thờ i gian thực thi
Miêu tả Xóa màn hình và đƣa con trỏ về đầu Đƣa con trỏ về đầu. Nội dung trong DDRAM
Trang 39
1.64ms 1.64 ms
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Entry mode set
0
0
0
0
0
0
0
1
I/D
S
Display On/Off control
0
0
0
0
0
0
1
D
C
B
Cursor/ display shift
0
0
0
0
0
1
S/ R/ C L
*
*
Function set
0
0
0
0
1
DL
N
*
*
Set CGRAM address
0
0
0
1
Set DDRAM address
0
0
1
Địa chỉ DDRAM
Read busyflag and address counter
0
1
BF
Địa chỉ CGRAM / DDRAM
1
0
Dữ liệu ghi
1
1
Dữ liệu đọc
Write to CGRAM or DDRAM Read from
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
F
Địa chỉ CGRAM
không đổi. Thiết lập hƣớ ng di chuyển (I/D) con trỏ và lựa chọn chế độ dịch chuyển (S). Nội dung trong DDRAM không đổi. Bật/tắt hiển thị (D), bật/tắt con trỏ (C), nhấp nháy con trỏ (B) Thiết lập con trỏ di chuyển hoặc hiển thị di chuyển (S/C) và chọn hƣớ ng di chuyển (R/L) Thiết lập chiều dài dữ liệu (DL), số dòng hiển thị (N), font chữ (F) Thiết lập địa chỉ CGRAM, CGRAM trao đổi dữ liệu sau thiết lập này Thiết lập địa chỉ DDRAM, DDRAM trao đổi dữ liệu sau thiết lập này. BF = 1 lệnh đang đƣợ c thực thi. Nội dung bộ đếm địa chỉ của CGRAM/DRAM. Ghi dữ liệu vào CGRAM hay DDRAM Đọc dữ liệu từ Trang 40
40 us
40 us
40 us
40 us
40 us
40 us
0 us
40 us 40 us
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
CGRAM or DDRAM Bit I/D S D C B S/C R/L DL N F BF
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
CGRAM hay DDRAM
Bảng 7. Tập lệnh HD44780 Setting/Status 1 = tăng vị trí con trỏ 0 = giảm vị trí con trỏ 0 = không di chuyển hiển thị 1 = di chuyển hiển thị 0 = không hiển thị 1 = hiển thị 0 = không hiển thị con trỏ 1 = hiển thị con trỏ 0 = không nhấp nháy con trỏ 1 = nhấp nháy con trỏ 0 = dịch chuyển con trỏ 1 = dịch chuyển hiển thị 0 = dịch chuyển trái 1 = dịch chuyển phải 0 = dữ liệu 4 bit 1 = dữ liệu 8 bit 0 = 1 dòng 1 = 2 dòng 0 = font 5x7 1 = font 5x10 0 = bộ điều khiển sẵn sàng nhận 1 = bộ xử lý đang xử lý lệnh lệnh Bảng 8. Bit lệnh HD44780
2. GIAO TIẾP PMP a) Giớ i thiệu PMP đƣợ c sử dụng để giao tiếp vớ i các thiết b ị ngoại vi song song: ADC, b ộ đệm RAM, các thiết bị giao tiếp ISA, LCD, đĩa cứng và thẻ CompactFlash. Đặc tính của PMP: Dữ liệu hai chiều 8 hoặc 16 bit 16 đƣờng địa chỉ 6 tín hiệu điều khiển: o Enable o Address Latch o Read o Write o Và 2 tín hiệu Chip Select Tác vụ đọc và ghi vớ i PMP có thể cấu hình để phù hợ p vớ i thiết bị và đảm bảo yêu cầu về tốc độ của thiết bị.
b) Cấu hình PMP sử dụng cho LCD Cũng nhƣ các giao tiế p ngoại vi khác của PIC 24F, PMP chứa những thanh ghi để cấu hình cho việc trao đổ i dữ liệu: PMCON, PMMODE, PMADDR, PMSTAT, PMPEN và PADCFG. Sinh viên cần tham khảo tài liệu 24F PMP Reference ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 41
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Chapter 39713a trong PIC24F Family Reference Manual để hiểu các cấu trúc và chức năng của các thanh ghi này. Sinh viên có thể cấu hình PMP theo đề nghị sau để sử dụng PMP trong giao tiếp vớ i LCD: Cho phép PMP Không đa hợp địa chỉ và dữ liệu Cho phép tín hiệu Enable Cho phép tín hiệu Read Tín hiệu Enable tích c ực mức cao Tín hiệu Read tích c ực mức cao, tín hi ệu Write tích c ực mức thấp Chế độ Master vớ i tín hiệu Read và Write trên cùng một chân (RD5) Bus dữ liệu 8 bit Chỉ cần một tín hiệu địa chỉ nên chỉ có PMA0 và PMA1 đƣợ c sử dụng. LCD là thi ết bị đáp ứng chậm nên ngƣờ i dùng cần thêm các tr ạng thái chờ trong mỗi chuỗi đọc/ghi. Khi s ử dụng PMP, ngƣờ i dùng có thể sử dụng số trạng thái chờ tối đa: Chờ dữ liệu ổn định trƣớc khi đọ c ghi: 4 × Tcy Giữa hai tín hi ệu R/W và Enable: 15 × Tcy Chờ dữ liệu ổn định sau tín hiệu Enable tích cực: 4 × Tcy Khở i tạo PMP sử dụng cho LCD:
PMCON = 0x83BF; PMMODE = 0x3FF; PMAEN = 0x0001;
Sau những câu lệnh trên, ngƣờ i s ử dụng có thể giao tiếp vớ i module LCD và c ấu hình LCD theo tiêu chu ẩn nhà sản xuất. Việc cấu hình LCD phải thỏa mãn yêu c ầu thờ i gian. Sinh viên coi l ại bảng 7 để biết thêm chi ti ết yêu cầu thờ i gian khi cấu hình LCD.Chú ý:Không thể cấu hình LCD trong khoảng thờ i gian nhỏ hơn 30 ms kể từ khi LCD đƣợ c cấp nguồn. Để đơn giản, sinh viên có thể sử dụng timer ở chế độ định thời để tạo độ trễ trong chuỗi cấu hình LCD. Trƣớ c khi ghi dữ liệu vào module LCD , ngƣờ i lập trình cần kiểm tra bit Busy (Busy Flag) của module LCD thông qua các bƣớ c sau: kiểm tra bit Busy c ủa PMP, đọc dữ liệu từ PMP để xóa dữ liệu trên bus dữ liệu PMP, kiểm tra bit Busy của PMP lần 2, đọc d ữ liệu t ừ PMP lần 2. Bit Busy chính là bit th ứ 7 c ủa d ữ liệu vừa đọc đƣợ c.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 42
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Để đƣa lệnh hay dữ liệu vào module LCD, ngƣờ i dùng phải lựa chọn thanh ghi lệnh hay dữ liệu (thiết lập địa chỉ PMA0 = RS = 0 cho l ệnh và PMA0 = RS = 1 cho dữ liệu) và đƣa lệnh cần thực thi hay dữ liệu vào bộ đệm dữ liệu PMP. Ví dụ: PMADDR = 0; // select the command register (ADDR = 0) PMDIN1 = 0b00111000; // function set: 8-bit interface, 2 lines, 5x7
3. BÀI TẬP BÀI 1. Viết chƣơng trình hiể n thị một chuỗi ký tự lên LCD Chương trình mẫ u: #include #include #define LCDDATA 1 // RS = 1 ; access data register #define LCDCMD 0 // RS = 0 ; access command register #define PMDATA PMDIN1 // PMP data buffer #define LCDbusy() LCDread(LCDCMD) & 0x80 #define LCDaddr() LCDread(LCDCMD) & 0x7F #define getLCD() LCDread(LCDDATA) #define putLCD(d) LCDwrite(LCDDATA,(d)) #define LCDcmd(c) LCDwrite(LCDCMD,(c)) #define LCDhome() LCDwrite(LCDCMD,2) #define LCDclr() LCDwrite(LCDCMD,1) void lcd_init() { // PMP initialization PMCON = 0x83BF; // Enable the PMP, long waits PMMODE = 0x3FF; // Master Mode 1 PMAEN = 0x0001; // PMA0 enabled // init TMR1 T1CON = 0x8030; // Fosc/2, prescaled 1:256, 64us/tick // wait for >30ms TMR1 = 0; while( TMR1<500); // 500 x 64us = 32ms PMADDR = LCDCMD; // select the command register (ADDR = 0) PMDATA = 0b00111000; // function set: 8-bit interface, 2 lines, 5x7 TMR1 = 0; while( TMR1<1); // 1 x 64us = 64us PMDATA = 0b00001100; // display ON, cursor off, blink off TMR1 = 0; while( TMR1<1); // 1 x 64us = 64us PMDATA = 0b00000001; // clear display TMR1 = 0; while( TMR1<25); // 25 x 64us = 1.6ms PMDATA = 0b00000110; // increment cursor, no shift TMR1 = 0; while( TMR1<25); // 25 x 16us = 1.6ms } char LCDread( int addr) {
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 43
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông int dummy; while( PMMODEbits.BUSY); PMADDR = addr; dummy = PMDATA; while( PMMODEbits.BUSY); return( PMDATA); } // LCDread void LCDwrite( int addr, char c) { while( LCDbusy()); while( PMMODEbits.BUSY); PMADDR = addr; PMDATA = c; } // LCDwrite
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
// wait for PMP to complete previous commands // select the command address // initiate a read cycle, dummy read // wait for PMP to complete the sequence // read the status register
// wait for PMP to be available
void putsLCD( char *s) { while(*s) putLCD( *s++); } //putsLCD main( void) { // initializations lcd_init(); // put a title on the first line putsLCD("test lcd"); } // main
BÀI 2. Lập trình để hệ thống đọc giá trị điện thế tại ngõ ra trên biến trở và hiển thị lên LCD dƣớ i dạng số thập phân có hai chữ số ở phần thập phân sử dụng ngắt ADC. BÀI 3. Lập trình để hệ thống hiển thị nhiệt độ môi trƣờ ng trên LCD dạng thập phân có 2 ch ữ số ở phần thập phân sử dụng ngắt ADC.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 44
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
BÀI 7.
GIAO TIẾP UART
MỤC ĐÍCH Bài thực hành giúp sinh viên tiếp cận khái niệm UART,cách cấu hình UART vớ iPIC 24F và xây dụng các ứng dụng điều khiển liên quan đến cổng giao tiếp RS232.
1. KHÁI NIỆM UART UART là viết tắt của thuật ngữ Universal asynchronous receiver/transmitter (b ộ truyền nhận nối tiếp bất đồng bộ). Khái niệm UART thƣờng để chỉ các thiết bị phần cứng, không phải là một chuẩn giao tiếp. Trong truyền thông nối tiếp, dữ liệu đƣợ c gửi đi từng bit. Bộ truyền sẽ chuyển các byte dữ liệu thành các bit n ối tiếp sử dụng thanh ghi dịch vào - song song - ra - n ối tiếp. Bộ nhận s ẽ chuyển các bit này thành các byte d ữ liệu s ử dụng thanh ghi dịch vào - nối tiếp - ra - song song. Truyền thông bất đồng bộ có nghĩa là dữ liệu đƣợ c truyền theo khung chu ẩn và không phụ thuộc vào tín hiệu định thờ i (xung Clock). Các khái niệm liên quan giao ti ếp UART: Tốc độ baud: số bit truyền trong 1 s. Frame: bao gồm các qui đị nh số bit trong mỗi lần truyền, các bit báo (Start Bit, Stop Bit), các bit kiểm tra Parity. Start bit:là bit đầu tiên đƣợ c truyền trong khung, bit này ch ỉ báo cho thiết bị khi một gói dữ liệu sắp tớ i. Data: dữ liệu cần truyền đi, số bit data không bắt buộc là 8, LSB sẽ đƣợ c truyền trƣớ c. Parity: kiểm tra dữ liệu truyền đi. Stop bit: bit chỉ báo gói dữ liệu đã đƣợ c truyền xong.
Hình 7-1. Một khung dữ liệu UART tiêu bi ểu
2. MODULE UART TRÊN PIC 24F a) Giớ i thiệu Module UART là một trong nh ững module giao ti ếp nối tiếp trên PIC 24F. Module này có th ể đƣợc dùng để trao đổi d ữ liệu vớ i các thiết b ị ngoại vi hay PC ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 45
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
thông qua các giao th ức RS232, RS485, LIN 1.2 hay IrDA ®. Module UART hỗ trợ giao thức bắt tay phần cứng và tích h ợ p bộ mã hóa và giải mã IrDA. Module UART trên PIC 24F chứa một FIFO cho mỗi chiều truyền nhận.
Hình 7-2. Sơ đồ khối đơn giả n module UART trên PIC 24F b) Các thanh ghi điề u khiển i. Thanh ghi UxMODE
Hình 7-3. Thanh ghi chế độ UARTx Bit 15
Bit 14
UARTEN: UARTx Enable bit 1 = cho phép UARTx, các chân UARTx đƣợc điề u khiển bở i UARTx theo định nghĩa từ các bit điều khiển UEN<1:0> và UTXEN 0 = tắt UARTx, các chân UARTx đƣợc điều khiển bở i các thanh ghi PORT, LAT và TRIS UFRZ: Freeze in Debug Mode bit 1 = module không hoạt động trong chế độ debug 0 = module hoạt động trong chế độ debug
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 46
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bit 13 Bit 12 Bit 11 Bit 10 Bit 9-8
Bit 7 Bit 6 Bit 5
Bit 4 Bit 3 Bit 2-1
Bit 0
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
USIDL: Stop in Idle Mode bit 1 = module không hoạt động khi CPU idle 0 = Module hoạt động khi CPU idle IREN: IrDA Encoder and Decoder Enable bit 1 = cho phép bộ mã hóa và giải mã IrDA 0 = không cho phép bộ mã hóa và giải mã IrDA RTSMD: Mode Selection for ̅ Pin bit 1 = chân ̅ hoạt động ở chế độ bán công 0 = chân ̅ hoạt động trong chế độ điều khiển ALTIO: UARTx Alternate I/O Selection bit 1 = UARTx sử dụng các chân UxATX và UxARX 0 = UARTx sử dụng các chân UxTX và UxRX UEN<1:0>: UARTx Enable bits 11 = UxTX, UxRX và BCLKx đƣợ c cho phép và sử dụng, chân ̅ đƣợc điều khiển bở i chốt 10 = UxTX, UxRX, ̅và̅ đƣợ c cho phép và sử dụng 01 = UxTX, UxRX and ̅đƣợ c cho phép và sử dụng, ̅ đƣợ c điều khiển bở i các chốt 00 = UxTX và UxRX đƣợ c cho phép và sử dụng, các chân ̅, ̅và BCLKx đƣợc điều khiển bở i các chốt WAKE: Enable Wake-up on Start bit Detect During Sleep Mode bit 1 = cho phép chế độ WAKE 0 = không cho phép chế độ WAKE LPBACK: UARTx Loopback Mode Select bit 1 = bật chế độ loopback 0 = tắt chế độ loopback ABAUD: Auto-Baud Enable bit 1 = cho phép xác định tốc độ Baud tại ký tự tiếp theo, bit này đƣợ c xóa bở i phần cứng khi kết thúc truyền dữ liệu 0 = không cho phép xác định tốc độ Baud tại ký tự tiếp theo RXINV: Receive Polarity Inversion bit 1 = Trạng thái Idle của chân UxRX là „0‟ 0 = Trạng thái Idle của chân UxRX là „1‟ BRGH: High Baud Rate Select bit 1 = tốc độ cao 0 = tốc độ thấp PDSEL<1:0>: Parity and Data Selection bits 11 = 9-bit data, no parity 10 = 8-bit data, odd parity 01 = 8-bit data, even parity 00 = 8-bit data, no parity STSEL: Stop Selection bit 1 = 2 Stop bits 0 = 1 Stop bit
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 47
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
ii.
thanh ghi UxSTA
Bit 15, 13
Bit 14
Bit 12 Bit 11 Bit 10
Bit 9 Bit 8 Bit 7, 6
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Hình 7-4. Thanh ghi trạng thái và điều khiển UTXISEL<1:0> Transmission Interrupt Mode Selection bits 11 = Reserved 10 = ngắt sinh ra khi một ký tự đƣợ c chuyển tớ i thanh ghi dịch Transmit 01 = ngắt sinh ra khi việc truyền ký tự kết thúc 00 = ngắt sinh ra khi có b ất cứ ký tự nào đƣợ c chuyển tớ i thanh ghi dịch Transmit (điều này có nghĩa có ít nhấ t một chỗ trống trong bộ đệm gửi) UTXINV: Transmit Polarity Inversion bit IREN = 0: 1 = UxTX Idle là „1‟ 0 = UxTX Idle là „0‟ IREN = 1: 1 = IrDA encoded UxTX Idle state is „1‟ 0 = IrDA encoded UxTX Idle state is „0‟ Không đƣợ c sử dụng UTXBRK: Transmit Break bit 1 = Chân UxTX đƣợc đƣa xuố ng thấp bất chấp trạng thái bộ truyền 0 = không cho phép truyền ký tự break UTXEN: Transmit Enable bit 1 = cho phép b ộ truyền, chân UxTX đƣợc điều khiển bở i UARTx (nếu UARTEN = 1) 0 = không cho phép bộ truyền, bộ đệm bị reset, chân UxTX đƣợ c điều khiển bở i thanh ghi PORT UTXBF: Transmit Buffer Full Status bit (read-only) 1 = bộ đệm đầy 0 = bộ đệm chƣa đầy, có thể đƣa thêm ký tự vào bộ đệm TRMT: Transmit Shift Register is Empty bit (read-only) 1 = thanh ghi d ịch và bộ đệm bộ truyền rỗng 0 = thanh ghi d ịch không rỗng URXISEL<1:0>: Receive Interrupt Mode Selection bits 11 = cờ ngắt đƣợ c thiết lập khi bộ đệm đầy 10 = cờ ngắt đƣợ c thiết lập khi bộ đệm đầy ¾
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 48
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
iii.
0x = cờ ngắt đƣợ c thiết lập khi nhận đƣợ c một ký tự ADDEN: Address Character Detect bit (bit 8 of received data = 1) 1= bật chế độ Address Detect, nếu truyền 9 bit, bit này không có ý nghĩa 0 = không bật chế độ Address Detect RIDLE: Receiver Idle bit (read-only) 1 = bộ nhận đang trong trạng thái Idle 0 = dữ liệu đang đƣợ c nhận PERR: Parity Error Status bit (read-only) 1 = Lỗi Parity 0 = Không có lỗi Parity FERR: Framing Error Status bit (read-only) 1 = lỗi frame 0 = frame không có lỗi OERR: Receive Buffer Overrun Error Status bit (clear/read-only) 1 = bộ đệm nhận bị tràn 0 = bộ đệm nhận không bị tràn Nếu bit này bị xóa sau khi đã thiế t lập, bộ đệm nhận và thanh ghi dịch của bộ nhận sẽ bị xóa về trạng thái rỗng URXDA: Receive Buffer Data Available bit (read-only) 1 = bộ đệm nhận có dữ liệu 0 = bộ đệm nhận không có dữ liệu thanh ghi UxRXREG
iv.
Hình 7-5. Thanh ghi chứ a d ữ liệu nhận đƣợ c thanh ghi UxTXREG
Bit 5
Bit 4 Bit 3 Bit 2 Bit 1
Bit 0
Hình 7-6. Thanh ghi chứ a d ữ liệu gửi đi ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 49
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
v.
thanh ghi UxBRG
Bit 15 0
Hình 7-7. Thanh ghi t ốc độ Baud BRG<15:0>: Baud Rate Divisor bits
c) Bộ tạo tốc độ Baud Module UART đƣợ c tích hợ p một bộ tạo tốc độ Baud 16-bit. Thanh ghi UxBRG điều khiển một bộ định thờ i 16 bit chạy tự do. Công thứ c tính t ốc độ Baud: Vớ i BRGH = 0,
Vớ i BRGH = 1,
Trong đó: UxBRG là giá trị thanh ghi do ngƣờ i dùng thiết lập, Fcy là tần số
lệnh.
d) Cấu hình UART Module UART sử dụng chuẩn định dạng Non-Return-to-Zero (NRZ) (1 start bit, 8 hay 9 bit dữ liệu và 1 hay 2 bit stop). Parity đƣợ c hỗ trợ bở i ph ần cứng và có thể thiết lập là parity chẵn, lẻ hay không có parity. Đị nh d ạng phổ biến nhất là 8 bit, no parity và một stop bit (ký hiệu là 8,N,1). Số lƣợ ng bit data, stop bit và parity đƣợc định nghĩa trong các bit PDSEL[1:0] và STSEL. Một bộ sinh tốc độ Baud on-chip đƣợ c s ử dụng để tạo t ốc độ Baud dựa vào clock h ệ thống. Bộ nhận và bộ truyền dữ liệu có thể hoạt động độ c lập nhau nhƣng phải có chung đị nh dạng dữ liệu. Cho phép module UART: module UART đƣợ c cho phép thông qua bit UARTEN và bit UTXEN. Một khi module UART đƣợ c bật, các chân UxTX, UxRX đƣợ c cấu hình thành các chân output và input b ất ch ấp trạng thái của các bit trong thanh ghi TRIS. Khi không truy ền dữ liệu, UxTX ở mức logic 1.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 50
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Tắt module UART: module UART có th ể tắt bằng cách xóa bit UARTEN. Đây là trạng thái mặc định sau khi reset h ệ thống. Nếu UART bị tắt, các chân UART sẽ hoạt động nhƣ chân bình thƣờng đƣợc điề u khiển b ở i thanh ghi PORT và TRIS. Tắt UART sẽ làm cho bộ đệm bị xóa. Tất c ả các ký tự truyền tớ i bộ đệm sẽ bị mất. Sử dụng chân thay thế: một vài dòng PIC 24F có th ể sử dụng các chân thay thế cho các chân UART khi các chân UART đƣợ c sử dụng vào mục đích khác.
e) Bộ truyền UART Bộ phận ch ủ yếu của b ộ truyền là thanh ghi d ịch UxTSR. Thanh ghi này nh ận d ữ liệu thanh ghi UxTXREG. Thanh ghi UxTSR sẽ không nhận dữ liệu từ UxTXREG cho đến khi stop bit của dữ liệu trƣớc đƣợ c truyền đi. Việc truyền dữ liệu đƣợ c cho phép bằng cách bật bit UTXEN sau khi d ữ liệu đã đƣợ c g ửi xu ống thanh ghi UxTXREG và bộ tạo tốc độ Baud cấp xung. Xóa bit UTXEN trong khi truyền sẽ kết thúc truyền dữ liệu và reset b ộ truyền, chân UxTX đồng thờ i có trạng thái trở kháng cao. Bộ truyền có thể sinh ra ngắt. Các bit điề u khiển UTXISEL<1:0> xác định thờ i điểm sinh ra ngắt. UTXISEL<1:0> = 00: cờ ngắt UxTXIF đƣợ c set khi một ký tự đƣợ c chuyển t ớ i thanh ghi dịch UxTSR. Điều này có nghĩa là bộ đệm có ít nhất một chỗ trống để nhận thêm dữ liệu. UTXISEL<1:0> = 01: UxTXIF đƣợ c set khi ký t ự cuối cùng đƣợ c chuyển ra khỏi thanh ghi d ịch UxTSR. Điều này có nghĩa là tấ t c ả dữ liệu đã đƣợ c truyền. UTXISEL<1:0> = 10: UxTXIF đƣợ c set khi ký tự đƣợ c chuyển đến thanh ghi dịch UxTSR và bộ đệm rỗng. Thiết lập bộ truyền UART: Khở i tạo thanh ghi UxBRG để có tốc độ Baud mong muốn Thiết lập số data bit, stop bit và parity thông qua các bit PDSEL<1:0> và STSEL Trong trƣờ ng hợ p sử dụng ngắt, sinh viên cần thiết lập các bit điề u khiển ngắt (_UxTXIE, _UxTXIP) và lựa chọn chế độ ngắt của UART thông qua các bit UTXISEL[1:0]. Bật module UART Cho phép truyền dữ liệu bằng cách bật bit UTXEN
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 51
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Truyền d ữ liệu c ần gửi xuống thanh ghi UxTXREG. Để kiểm tra bộ truyền có sẵn sàng nhận dữ liệu hay không, sinh viên có th ể kiểm tra bit UTXBF.
Hình 7-8. Truyền dữ liệu qua UART f) Bộ nhận UART Bộ phận chính trong bộ nhận UART là thanh ghi d ịch UxRSR. Dữ liệu đƣợ c lấy từng bit từ chân UxRX và đƣợ c gửi đến bộ khôi phục dữ liệu. Bộ khôi phục dữ liệu hoạt động ở tần số gấp 16 lần tốc độ Baud. Sau khi nhận đƣợ c stop bit, dữ liệu hoàn chỉnh sẽ đƣợ c gửi đến FIFO (nếu FIFO rỗng). Bộ đệm dữ liệu nhận là một FIFO có kích thƣớ c 4 word x 9 bit. Thanh ghi UxRXREG có thể dùng để truy xuất dữ liệu t ừ ngõ ra của FIFO. Khi một l ỗi x ảy ra trong quá trình nh ận dữ liệu, các bit báo lỗi sẽ đƣợ c và sinh ra ngắt nếu đƣợ c cho phép. Bộ nhận dữ liệu có thể sinh ra ngắt. Các bit URXISEL[1:0] xác định thời điểm sinh ra ngắt: URXISEL[1:0] = 00 hay 01: ngắt sinh ra mỗi khi có một word đƣợ c truyền từ thanh ghi dịch UxRSR đến bộ đệm. URXISEL[1:0] = 10: ngắt sinh ra khi b ộ đệm có 3 ho ặc 4 word. URXISEL[1:0] = 11: ngắt sinh ra khi b ộ đệm có 4 word. Thiết lập bộ nhận UART: Khở i tạo thanh ghi UxBRG để có tốc độ Baud mong muốn Thiết lập số bit data, stop bit và parity thông qua các bit PDSEL[1:0] và STSEL Trong trƣờ ng hợ p sử dụng ngắt, sinh viên cần thiết lập các bit điề u khiển ngắt (_UxRXIE, _UxRXIP) và các bit ch ọn chế độ ngắt của bộ nhận URXISEL[1:0]. Cho phép module UART
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 52
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Nếu không sử dụng ngắt, sinh viên có th ể kiểm tra bit URXDA để biết bộ nhận dữ liệu hay chƣa.
g) Sử dụng UART vớ i 9 bit data Kiểu trao đổi dữ liệu này có thể đƣợ c dùng trong môi trƣờng đa bộ xử lý.
3. BÀI TẬP BÀI 1. BÀI 2. BÀI 3.
Lập trình để hệ thống có thể gửi một ký tự qua cổng RS232. Lập trình để hệ thống có thể nhận một chuỗi ký tự qua cổng RS232. Lập trình để hệ thống gửi giá trị nhiệt độ qua cổng RS232.
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 53
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
PHỤC LỤC SỬ DỤNG HYPER TERMINAL Hyper Terminal là chƣơng trình cho phép máy tính trao đổ i dữ liệu thông qua cổng giao tiếp nối tiếp. Trong bài th ực hành này, sinh viên ph ải sử dụng Hyper Terminal. Bƣớ c 1. Vào Start All Programs Accessories Communications Hyper Terminal Bƣớc 2. Đặt tên kết nối
Bƣớ c 3. Chọn cổng COM
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 54
Trƣờng Đại Học Khoa Học Tự Nhiên Khoa Điện Tử - Viễn Thông
Bộ Môn Máy Tính – Hệ Th ng Nhúng Giáo trình Thực Hành Vi Điều Khiển
Bƣớ c 4. Thiết lập thông số cổng COM
Bƣớ c 5. Thiết lập hiển thị Vao file Properties tab Settings ASCII Setup…
ThS. Nguyễn Quốc Khoa CN. Nguyễn Đức Tiến
Trang 55