Microsoft Word Document1 GIÁO TRÌNH THỰC HÀNH VI XỬ LÝ KỸ THUẬT VI XỬ LÝ BỘ MÔN ĐIỆN TỬ MÁY TÍNH KHOA CÔNG NGHỆ ĐIỆN TỬ BÀI GIẢNG THỰC HÀNH VI XỬ LÝ PIC December 22, 2012 Biên soạn Phạm Quang Trí pqtri2002gmail com 1 BÀI 1 LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN LED ĐƠN MỤC ĐÍCH � Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp chương trình vào vi điều khiển và sử dụng Mô hình thí nghiệm PIC để kiểm chứng � Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển PIC.
GIÁO TRÌNH THỰC HÀNH VI XỬ LÝ/ KỸ THUẬT VI XỬ LÝ BỘ MƠN ĐIỆN TỬ MÁY TÍNH _ KHOA CÔNG NGHỆ ĐIỆN TỬ BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC December 22, 2012 BÀI LẬP TRÌNH ĐIỀU KHIỂN XUẤT NHẬP CƠ BẢN: LED ĐƠN MỤC ĐÍCH: Thực hành lập trình ứng dụng máy tính, biên dịch chương trình, nạp chương trình vào vi điều khiển sử dụng Mơ hình thí nghiệm PIC để kiểm chứng Điều khiển thiết bị ngoại vi port vi điều khiển PIC Điều khiển xuất nhập sử dụng LED đơn YÊU CẦU: Nắm vững cấu trúc tập lệnh vi điều khiển PIC Nắm vững cấu trúc LED đơn Nắm sơ đồ nguyên lý hoạt động Modul LED đơn Mơ hình thí nghiệm PIC Nắm ngun lý điều khiển LED đơn chế độ khác Biết cách viết chương trình điều khiển LED đơn hoạt động theo nhiều kiểu khác Biên soạn: Phạm Quang Trí pqtri2002@gmail.com BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC December 22, 2012 1.2.2.1 Sơ đồ nguyên lý: Bước 1: Thiết kế sơ đồ nguyên lý mạch điều khiển Hình 1.10: Sơ đồ nguyên lý mạch điều khiển 1.2.2.2 Lưu đồ giải thuật: Bước 2: Thiết kế lưu đồ giải thuật chương trình điều khiển Hình 1.11: Lưu đồ giải thuật chương trình điều khiển 1.2.2.3 Chương trình điều khiển: Bước 3: Sử dụng phần mềm MPLAB công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật chương trình điều khiển thiết kế để thực việc viết chương trình, biên dịch kiểm tra lỗi cú pháp chương trình Nếu có lỗi xuất thực việc hiệu chỉnh khắc phục lỗi Nguyên nhân phát sinh lỗi thông thường cú pháp lệnh khơng xác, cần phải kiểm tra lại Nếu khơng có lỗi xuất thực phần nội dung Biên soạn: Phạm Quang Trí pqtri2002@gmail.com BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC December 22, 2012 Mã nguồn (Source Code) chương trình điều khiển hệ thống sau: // *************************************************** #include #include // Cau hinh su dung dao dong noi 4MHz CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS); #define _XTAL_FREQ 4000000 // *************************************************** // Ten CTC: init_PORTD // Thong so dau vao: // Thong so dau ra: // Cong dung: Khoi tao Port D // *************************************************** void init_PORTD(void) { PORTD = 0X00; TRISD = 0X00; } // Chuong trinh chinh void main (void) { // Khai bao bien // Chuong trinh init_PORTD(); while(1) { PORTD = 0x00; delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); PORTD = 0xFF; delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(100); } } 1.2.2.4 Sơ đồ mô phỏng: Bước 4: Sử dụng phần mềm ISIS Professional (Protues 7.10) để thực việc mơ q trình hoạt động hệ thống vi điều khiển Mạch mô thiết kế sẵn lưu máy tính Vì người học tự vẽ thiết kế mạch mơ lấy mạch mơ có sẵn sở liệu môn học Thực chạy mô quan sát trực tiếp kết hình máy tính.Nếu có lỗi xuất thực việc hiệu chỉnh khắc phục lỗi Nguyên nhân phát sinh lỗi thông thường giải thuật chương trình khơng xác mạch mơ vẽ khơng Biên soạn: Phạm Quang Trí pqtri2002@gmail.com December 22, 2012 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC xác, cần phải kiểm tra lại Nếu khơng có lỗi xuất thực phần nội dung Sơ đồ mô mạch điều khiển sau: C2 X1 4MHz 13 14 22p C1 +5V 22p R10 10k R1 10 100R C3 +5V U1 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT 0.1uF RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 33 RB0 34 RB1 35 RB2 36 RB3 37 RB4 38 RB5 39 RB6 40 RB7 15 RC0 16 RC1 17 RC2 18 RC3 23 RC4 24 RC5 25 RC6 26 RC7 19 RD0 20 RD1 21 RD2 22 RD3 27 RD4 28 RD5 29 RD6 30 RD7 U2 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 COM 1C 2C 3C 4C 5C 6C 7C 8C 1B 2B 3B 4B 5B 6B 7B 8B 10 18 17 16 15 14 13 12 11 RP2 +5V 10K D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7 ULN2803 +5V +5V +5V +5V +5V +5V +5V +5V R9 R8 R7 R6 R5 R4 R3 R2 D8 D7 D6 D5 D4 D3 D2 D1 330 330 330 330 330 330 330 330 PIC16F877A Hình 1.12: Sơ đồ mơ mạch điều khiển 1.2.2.5 Sơ đồ kết nối: Bước 5: Sử dụng Modul có sẵn Mơ hình thí nghiệm PIC, giới thiệu phần đầu thực hành, để lắp ráp mạch theo thiết kế bên Lưu ý chiều cắm dây cáp liệu (có dấu ký hiệu vng màu trắng hình vẽ) Thực qui trình kết nối Modul theo sơ đồ đây: Tắt nguồn AC cấp cho Mơ hình thí nghiệm PIC Dùng dây cáp USB kết nối cổng USB máy tính với đầu nối USB Modul lập trình PICkit2 Dùng dây cáp kết nối đầu nối ICSP Modul lập trình PICkit2 với đầu nối ICSP Modul vi điều khiển Dùng dây cáp kết nối đầu nối PORT D Modul vi điều khiển với đầu nối INPUT Modul đệm – đảo Dùng dây cáp kết nối đầu nối OUTPUT Modul đệm – đảo với đầu nối BARLED Modul LED đơn Dùng dây cáp kết nối đầu nối POWER Modul vi điều khiển, Modul LED đơn Modul đệm – đảo với đầu nối +5V Modul nguồn cung cấp Biên soạn: Phạm Quang Trí pqtri2002@gmail.com BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC December 22, 2012 Hình 1.13: Sơ đồ kết nối mạch điều khiển Bước 6: Sử dụng phần mềm MPLAB PICkit2 để thực việc nạp chương trình cho vi điều khiển PIC16F877A Mơ hình thí nghiệm PIC Thực qui trình nạp chương trình cho PIC: Bật nguồn AC cấp cho Mơ hình thí nghiệm PIC Khởi động phần mềm nạp chương trình (MPLAB PICkit2) Chọn tập tin chương trình điều khiển cần nạp Reset lại mạch nạp PICkit2 Nạp chương trình vào vi điều khiển Reset lại vi điều khiển để chạy chương trình quan sát trực tiếp kết Mơ hình thí nghiệm PIC Quan sát trực tiếp kết Mơ hình thí nghiệm PIC Nếu có lỗi xuất thực việc hiệu chỉnh khắc phục lỗi Nguyên nhân phát sinh lỗi thường việc lắp ráp phần cứng khơng xác linh kiện bị hư hỏng, cần phải kiểm tra lại Nếu khơng có lỗi xuất hồn tất thực hành Biên soạn: Phạm Quang Trí pqtri2002@gmail.com SW4 RB0 SDO SDI SCK DIN DOUT SCK SS TRIG SW5 +5V RB1 Kit RP (for Lab6 - SPI) - PIC16F887 Designed by: Pham Quang Tri SW6 RB2 C7 Y1 R3 4MHz PULLUP OSC2 U2 MCLR 22p OSC1 +5V C6 22p R2 10K R49 MCLR 100R SW1 C10 0.1uF RE3/MCLR/VPP RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RA0 RA0/AN0/ULPW U/C12IN0RC2/P1A/CCP1 MOTOR_SENSE RA1/AN1/C12IN1RC3/SCK/SCL C2IN+ RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA AN3 RA3/AN3/VREF+/C1IN+ RC5/SDO RA4 RA4/T0CKI/C1OUT RC6/TX/CK RC0 RA5/AN4/SS/C2OUT RC7/RX/DT OSC2 14 RA6/OSC2/CLKOUT OSC1 13 RA7/OSC1/CLKIN RD0 RD1 RB0 33 RB0/AN12/INT RD2 RB1 34 RB1/AN10/C12IN3RD3 RB2 35 RB2/AN8 RD4 RB3 36 RB3/AN9/PGM/C12IN2RD5/P1B RB4 37 RB4/AN11 RD6/P1C RB5 38 RB5/AN13/T1G RD7/P1D PGC 39 RB6/ICSPCLK PGD 40 RB7/ICSPDAT RE0/AN5 RE1/AN6 RE2/AN7 PIC16F887 +5V U1 15 RC0 16 T1OSC2 17 CCP1 18 SCK 23 SDI 24 SDO 25 TX 26 RX 19 RD0 20 LCD_RS 21 LCD_RW 22 LCD_E 27 LCD_DB4 28 LCD_DB5 29 LCD_DB6 30 LCD_DB7 MOTOR_EN RE1 10 RE2 SCK SDO SDI RD0 U6 SCK SI SO WP CS HOLD +5V 25LC256 LM016L R1 470 D1 LED BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 Hình 11.13: Sơ đồ kết nối mạch điều khiển Bước 6: Sử dụng phần mềm MPLAB PICkit2 để thực việc nạp chương trình cho PIC16F877A Mơ hình thí nghiệm PIC Thực qui trình nạp chương trình cho PIC: Bật nguồn AC cấp cho Kit thí nghiệm PIC (Microchip PIC Training Kit 16F887) Khởi động phần mềm nạp chương trình (MPLAB PICkit2) Chọn tập tin chương trình điều khiển cần nạp Reset lại mạch nạp PICkit2 Nạp chương trình vào vi điều khiển Reset lại vi điều khiển để chạy chương trình quan sát trực tiếp kết Kit thí nghiệm PIC (Microchip PIC Training Kit 16F887) Quan sát trực tiếp kết Mơ hình thí nghiệm PIC Nếu có lỗi xuất thực việc hiệu chỉnh khắc phục lỗi Nguyên nhân phát sinh lỗi thường việc lắp ráp phần cứng khơng xác linh kiện bị hư hỏng, cần phải kiểm tra lại Nếu khơng có lỗi xuất hồn tất thực hành 11.2.3 Bài thực hành số (Điều khiển modul MSSP hoạt động chế độ I2C – Inter-Integrated Circuit): Nội dung: Viết chương trình, mơ sử dụng Kit thí nghiệm PIC (Microchip PIC Training Kit 16F887) để thực yêu cầu sau: Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 17 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 Lập trình điều khiển Modul port nối tiếp đồng (MSSP: Master Synchronous Serial Port) tích hợp sẵn bên PIC16F887 hoạt động chế độ I2C Đọc giá trị nhiệt độ môi trường đo từ vi mạch cảm biến nhiệt độ TC74A05.0VAT Hiển thị giá trị nhiệt độ đọc hình LCD theo định dạng OC Vi mạch cảm biến nhiệt độ TC74A0-5.0VAT kết nối vào chân port PIC sơ đồ nguyên lý Hình 11.14 bên 11.2.3.1 Sơ đồ nguyên lý: Bước 1: Thiết kế sơ đồ nguyên lý mạch điều khiển Hình 11.14: Sơ đồ nguyên lý mạch điều khiển 11.2.3.2 Lưu đồ giải thuật: Bước 2: Thiết kế lưu đồ giải thuật chương trình điều khiển Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 18 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 Hình 11.15: Lưu đồ giải thuật chương trình điều khiển (Phần 1) Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 19 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 i2c_read_format Input: Slave_Add_WR: Địa thiết bị I2C (WRITE Mode) Slave_Add_RD: Địa thiết bị I2C (READ Mode) Add_Byte: Địa ghi cần đọc liệu Output: SSPBUF: Dữ liệu ghi cần đọc C i2c_read_format: Cấm tất ngắt hoạt động Gửi địa thiết bị đến TC74 (chế độ đọc) SSPBUF = Read Mode Address Tạo điều kiện START (SEN = 1) Chưa hoàn thành xong điều kiện ? (SEN = 1) Chưa hoàn thành xong gửi địa ? (RW = 1) Đ Đ S S Chưa có phản hồi ACK từ TC74 ? (ACKSTAT = 1) Gửi địa thiết bị đến TC74 (chế độ ghi) SSPBUF = Write Mode Address Đ S Chưa hoàn thành xong gửi địa ? (RW = 1) Đ Cho phép nhận liệu từ TC74 (RCEN = 1) Data Byte = SSPBUF Đ Chưa hoàn thành xong nhận liệu ? (RCEN = 1) S Chưa có phản hồi ACK từ TC74 ? (ACKSTAT = 1) S S Tạo xung NACK (ACKDT = 1) Gửi xung NACK đến TC74 (ACKEN = 1) Gửi lệnh điều khiển đến TC74 (chọn ghi cần đọc liệu) SSPBUF = Command Byte Chưa hoàn thành xong gửi địa ? (RW = 1) Đ Đ Chưa hoàn thành xong gửi xung NACK ? (ACKEN = 1) Đ S S Chưa có phản hồi ACK từ TC74 ? (ACKSTAT = 1) Tạo điều kiện STOP (PEN = 1) Đ S Chưa hoàn thành xong điều kiện ? (PEN = 1) Tạo điều kiện RESTART (RSEN = 1) Chưa hoàn thành xong điều kiện ? (RSEN = 1) S C Đ S Đ Cho tất ngắt hoạt động lại Trả liệu bit (Data Byte) đọc từ TC74 ghi xác định (Command Byte) (SSPBUF) END Hình 11.16: Lưu đồ giải thuật chương trình điều khiển (Phần 2) Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 20 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 i2c_receive_format Input: Slave_Add_RD: Địa thiết bị I2C (READ Mode) Output: SSPBUF: Dữ liệu địa xác định trình GHI ĐỌC cuối i2c_receive_format: B Cấm tất ngắt hoạt động Tạo điều kiện START (SEN = 1) Chưa hoàn thành xong điều kiện ? (SEN = 1) Đ S S Đ Chưa hoàn thành xong gửi xung NACK ? (ACKEN = 1) S Đ Chưa hoàn thành xong điều kiện ? (PEN = 1) S Cho phép nhận liệu từ TC74 (RCEN = 1) Data Byte = SSPBUF B Đ Tạo điều kiện STOP (PEN = 1) S Chưa có phản hồi ACK từ TC74 ? (ACKSTAT = 1) Đ Tạo xung NACK (ACKDT = 1) Gửi xung NACK đến TC74 (ACKEN = 1) Gửi địa thiết bị đến TC74 (chế độ đọc) SSPBUF = Read Mode Address Chưa hoàn thành xong gửi địa ? (RW = 1) Chưa hoàn thành xong nhận liệu ? (RCEN = 1) Đ S Cho tất ngắt hoạt động lại Trả liệu bit (Data Byte) đọc từ TC74 ghi xác định q trình GHI/ĐỌC liệu trước (SSPBUF) END Hình 11.17: Lưu đồ giải thuật chương trình điều khiển (Phần 3) Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 21 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 11.2.3.3 Chương trình điều khiển: Bước 3: Sử dụng phần mềm MPLAB công cụ biên dịch Hi-Tech, dựa vào lưu đồ giải thuật chương trình điều khiển thiết kế để thực việc viết chương trình, biên dịch kiểm tra lỗi cú pháp chương trình Nếu có lỗi xuất thực việc hiệu chỉnh khắc phục lỗi Nguyên nhân phát sinh lỗi thông thường cú pháp lệnh khơng xác, cần phải kiểm tra lại Nếu khơng có lỗi xuất thực phần nội dung Mã nguồn (Source Code) chương trình điều khiển hệ thống sau: Mã nguồn chương trình điều khiển (C File): // *************************************************** #include #include #include #include "lcd.h" #include "i2c.h" // Cau hinh su dung CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS); #define _XTAL_FREQ 4000000 // Khai bao bien // Ma dia chi cua cam bien TC74 (x = 0: Write, x = 1: Read) // IC Address // TC74A0-5.0VCT 1001 000x // TC74A1-5.0VCT 1001 001x // TC74A2-5.0VCT 1001 010x // TC74A3-5.0VCT 1001 011x // TC74A4-5.0VCT 1001 100x // TC74A5-5.0VCT 1001 101x (Default) // TC74A6-5.0VCT 1001 110x // TC74A7-5.0VCT 1001 111x #define Add_Wr_TC74 0x90 #define Add_Rd_TC74 0x91 #define Com_RTR_TC74 0x00 #define Com_RWCR_TC74 0x01 // Chuong trinh chinh void main() { // Khai bao bien unsigned int i; char buf_val[4]; char t; // Chuong trinh // R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 // ANSEL = | ANS7 | ANS6 | ANS5 | ANS4 | ANS3 | ANS2 | ANS1 | ANS0 | // U-0 U-0 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 // ANSELH = | — | — | ANS13 | ANS12 | ANS11 | ANS10 | ANS9 | ANS8 | ANSEL = 0; ANSELH = 0; lcd_init(); Biên soạn: Phạm Quang Trí pqtri2002@gmail.com 22 BÀI GIẢNG THỰC HÀNH VI XỬ LÝ - PIC August 21, 2013 i2c_init(); lcd_puts("\f***** Lab5 *****\n** I2C Sensor **"); for(i=0;i