Lập trình VĐK
Giáo trình thí nghiệm vi điều khiển ứng dụng MỤC LỤC CHƢƠNG I : PHẦN CỨNG PIC16F I.KIẾN TRÚC 1.Kiến trúc Von neumann 2.Kiến trúc harvard II.INSTRUCTION PIPELINING III.KÍCH THƢỚC TỪ LỆNH IV.THIẾT KẾ PHẦN CỨNG CHO PIC 10 1.Mạch nguyên lý 10 2.Chuẩn ICSP(In-Circurt Serial Programming) 11 3.Các tính đặc biệt, bit cấu hình PIC16F887 11 CHƢƠNG II : XUẤT NHẬP I/O PORT 21 I.MỤC ĐÍCH THÍ NGHIỆM 21 II.DỤNG CỤ THÍ NGHIỆM 21 III.CƠ SỞ LÝ THUYẾT 21 1.Thanh ghi qui định tín hiệu xử lý 21 2.Chức ghi TRIS 22 Chức ghi PORT 22 4.Những ghi đặc biệt có riêng PORTB 23 IV.BÀI TẬP THỰC HÀNH 26 V.BÀI TẬP TỰ GIẢI 32 CHƢƠNG III : ADC MODULE 33 I.MỤC ĐÍCH THÍ NGHIỆM 33 II.DỤNG CỤ THÍ NGHIỆM 33 III.CƠ SỞ LÝ THUYẾT 33 1.Tín hiệu tương tự tín hiệu số 33 2.ADC vi điều khiển PIC16F887 34 3.Làm việc với LCD 16x2 38 IV.BÀI TẬP THỰC HÀNH 40 V.BÀI TẬP TỰ GIẢI 43 Giáo trình thí nghiệm vi điều khiển ứng dụng CHƢƠNG IV :TIMER 46 I.MỤC ĐÍCH THÍ NGHIỆM 46 II.DỤNG CỤ THÍ NGHIỆM 46 III.CƠ SỞ LÝ THUYẾT 46 1.Nguyên tắc hoạt động timer : 47 2.Timer 47 3.Timer 50 4.Timer 53 IV.BÀI TẬP THỰC HÀNH 55 V.BÀI TẬP TỰ GIẢI 60 CHƢƠNG V: KHỐI CCP 61 (CAPTURE-COMPARE-PWM) 61 I.MỤC ĐÍCH THÍ NGHIỆM 61 II.DỤNG CỤ THÍ NGHIỆM 61 III.CƠ SỞ LÝ THUYẾT 61 1.Thanh ghi khởi tạo khối CCP1 Khối CCP1 cịn tích hợp thêm chân mang kí hiệu : P1A, P1B, P1C, P1D hỗ trợ cho việc điều khiển cầu H 62 2.Thanh ghi khởi tạo khối CCP2 63 3.Capture 64 4.Compare 64 5.PWM(Pulse-Width Modulated) 65 6.Các bước khởi tạo chức PWM 66 IV.BÀI TẬP THỰC HÀNH 67 V.BÀI TẬP TỰ GIẢI 70 CHƢƠNG VI :GIAO TIẾP NỐI TIẾP BẤT ĐỒNG BỘ 72 I.MỤC ĐÍCH THÍ NGHIỆM 72 II.DỤNG CỤ THÍ NGHIỆM 72 III.CƠ SỞ LÝ THUYẾT 72 1.Khái niệm giao tiếp nối tiếp bất đồng 72 2.Các ghi điều khiển truyền UART 74 3.Các ghi điều khiển nhận UART 76 Giáo trình thí nghiệm vi điều khiển ứng dụng 5.Cơng thức tính tốc độ baund rate 78 IV:BÀI TẬP THỰC HÀNH 78 V.BÀI TẬP TỰ GIẢI 81 TÀI LIỆU THAM KHẢO 83 PHỤ LỤC 84 I.CỬA SỔ CHƢƠNG TRÌNH 84 II.CÁC BƢỚC KHỞI TẠO MỘT PROJECT MỚI 84 II.HI TECH C CƠ BẢN 88 1.Khai báo biến 88 2.Kiểu trỏ 89 3.Kiểu enum 89 4.Phép toán học 90 5.Phép toán gán 90 6.Phép toán tăng , giảm 90 7.Phép toán quan hệ 90 8.Tóan tử logic 91 9.Toán tử theo bit 91 10.Chèn đoạn code Assembly 91 11.Các toán tử ưu tiên 92 12.Câu điều kiện 92 13.Toán tử lựa chọn 94 14.Vòng lặp 95 15.Mảng chiều 96 16.Mảng hai chiều 97 17.Cấu trúc chương trình c 97 IV.SƠ ĐỒ NGUYÊN LÝ KIT THÍ NGHIỆM 98 V.FILE LCD 101 1.lcd.c 101 2.lcd.h 106 Giáo trình thí nghiệm vi điều khiển ứng dụng CHƢƠNG I : PHẦN CỨNG PIC16F I.KIẾN TRÚC : Microchip Pic thiết kế dựa kiến trúc Harvard, kiến trúc RISC (Reduced Instruction Set Conputer – Máy tính với tập lệnh đơn giản hóa) Đây kiến trúc với nhiều cải tiến nâng cao hiệu xử lý giảm thiểu giá thành sản xuất Vậy đặc tính kiến trúc Havard mang lại hiệu cho PIC, thử so sánh hai kiểu RISC phổ biến Von Neumann Harvard 1.Kiến trúc Von neumann: Còn gọi kiến trúc Princeton, cách tổ chức nhớ kiểu kiến trúc nhớ chương trình nhớ liệu xem vùng nhớ, dùng chung Bus liệu Thời kỳ đầu kỷ ngun máy tính, nhớ khơng có độ tin cậy hay tạo lỗi hệ thống Chính mà kiểu kiến trúc ưa chuộng, dễ dàng thiết kế, nâng cao độ tin cậy hệ thống dễ dàng thay vùng nhớ bị lỗi kỹ thuật Nhờ lợi mà thời gian kiểu kiến trúc thương mại sản xuất Tuy nhiên có số nhược điểm: hạn chế băng thông, thực nhiều lần lấy liệu cho lệnh, thực song song thao tác Chính phổ biến kiến trúc Von Neumann mà hầu hết loại Vi Điều Khiến xây dựng quanh cấu trúc này, giá thành nhớ rẻ nhiều độ tin cậy tăng lên nhiều Von Neumann Architecture 8-bit Bus CPU Program & Data Memory Hình 1: Kiến trúc nhớ kiểu Von Neuman 2.Kiến trúc harvard : Havard có không gian nhớ dành cho nhớ liệu nhớ chương trình riêng biệt Lợi hiệu kiểu liệu có Bus liệu riêng biệt hoạt động đồng thời phục vụ cho nhớ liệu nhớ chương trình: Trong CPU lấy liệu từ nhớ chương trình, đọc ghi liệu vùng nhớ liệu Giáo trình thí nghiệm vi điều khiển ứng dụng Một lợi khác kiến trúc Harvard độ rộng Bus nhớ chương trình Bus liệu khác Không phải tất tất cà loại Vi Điều Khiển có kiến trúc Harvard điều có lợi này, PIC có Do bus có độ rộng khác nên độ rộng Bus nhớ chương trình rộng nhớ liệu Với PIC-8bit Bus dự liệu 8-bit, nhiên Bus nhớ chương trình rộng hơn, tùy thuộc mục đích loại PIC Với PIC 8-bit có loại phân chia thành loại có độ rộng Bus nhớ chương trình 12-bit, 14-bit, 16-bit Bus nhớ chương trình rộng đưa liệu từ nhớ chương trình nhiều chu kỳ máy Harvard Architecture 8-bit Bus 14-bit Bus CPU Data Memory Program Memory Hình 2: Kiến trúc nhớ kiểu Von Neuman II.INSTRUCTION PIPELINING: Việc lấy lệnh/dữ liệu từ nhớ chương trình thiết kế nâng cao hiệu suất Instruction pipelining cách thức lấy thực thi lệnh từ nhớ chương trình cách đồng thời Có thể xem hình: Hình 3: Quy trình thực thi lệnh PIC có bus truy xuất nhớ chương trình bus truy xuất nhớ liệu riêng biệt hoạt động đồng thời Nhưng trình ta lấy lệnh, làm biết liệu cần Giáo trình thí nghiệm vi điều khiển ứng dụng thiết cho lệnh đâu để thực thi đồng thời hai thao tác chu kỳ lệnh, thông tin địa liệu cần thiết vùng nhớ liệu nằm lệnh kia.Vấn đề giải Instruction Pipelining Trong chu kỳ lệnh CPU hoạt động, lệnh lấy vào Pipeline Bus nhớ chương trình truy xuất, Bus dự liệu khơng hoạt động Hình 4: Thực lệnh chu kỳ Trong chu kỳ lệnh thứ 2, lệnh lấy trước thực thi, có nghĩa Bus liệu hoạt động trao đổi liệu với CPU CPU thực thi lệnh Đồng thời lúc này, Bus hoạt động đồng thời Hình 5: Thực lệnh chu kỳ thứ hai Trong chu kỳ lệnh thứ 3, lệnh thứ lấy trước thực thi, đồng thời lệnh lấy Tới lúc thứ rõ ràng, ngoại trừ chu kỳ lệnh ra, chu kỳ lệnh thực thi xong lệnh, bao gồm bước lấy lệnh thực thi Bởi lúc thực thi lệnh lệnh có sẵn, thông tin địa nhớ liệu lấy vào từ lúc lệnh trước thực thi Giáo trình thí nghiệm vi điều khiển ứng dụng Hình 6:Thực lệnh chu kỳ thứ ba Chu kỳ thứ 4,5:Với quy trình lệnh nằm sau luôn thực thi lệnh trước thực thi xong Tuy nhiên đếm chương trình bị thay đổi lệnh, lệnh sau khơng thực Ở đây, lệnh Call thực thi khiến chương trình nhảy đến vùng nhớ khác lệnh đằng sau lệnh Call tất nhiên thực thi sau chương trình trở từ hàm SUB1 Nhưng, lệnh Call thực thi lệnh lấy vào Pipeline Hình 7: Thực lệnh chu kỳ thứ Như cần thiết phải loại bỏ lệnh sau Call khỏi Pipeline, đồng thời lấy lệnh khác vào Pipeline Có thể thấy, với lệnh làm thay đổi đếm chương trình phải chu kỳ máy Giáo trình thí nghiệm vi điều khiển ứng dụng Giáo trình thí nghiệm vi điều khiển ứng dụng III.KÍCH THƢỚC TỪ LỆNH Bởi có kiến trúc Harvard nên vi điều khiển PIC có độ rộng Bus nhớ chương trình khơng thiết với độ rộng Bus nhớ liệu (vi điều khiển bit bus có độ rộng bit) Đối với số vi điều khiển dùng kiến trúc Von neumann có độ rộng bus Do nhiều lệnh địi hỏi byte cung cấp đầy đủ thơng tin để thực thi Đơn giản, lệnh LDAA(Load Data to Accumulator A) chuyển số bit vào ghi A địi hỏi byte liệu bit, byte lại cho lệnh Điều có nghĩa là, thực lệnh này, nhớ bị truy xuất lần Ngoài việc hiệu tốc độ truy xuất ra, tổ chức từ lệnh 1, hay kiểu kiến trúc làm cho việc thiết kế vi điều khiển với nhớ vừa phải hợp yêu cầu khó khăn Hình 8: Quy trình thực thi lệnh LDAA Đối với PIC16F mà dùng, kiến trúc nhớ thiết kế 14 bit có độ rộng bus nhớ chương trình, phù hợp với ứng dụng vừa phải Từ lệnh dài chứa nhiều thông tin hơn, đủ để thực thi cơng việc với từ lệnh, có nghĩa cần truy xuất nhớ lần cho lệnh Với thiết kế kích thước nhớ tối ưu so với kích thước nhớ kiểu khác Hình 9: Thực thi cơng việc với từ lệnh Giáo trình thí nghiệm vi điều khiển ứng dụng IV.THIẾT KẾ PHẦN CỨNG CHO PIC 1.Mạch nguyên lý: Các chân nguồn Vdd phải cấp nguồn đầy đủ, không bỏ trống: Chip nhiều tính lượng Transistor lớn, số lượng Transistor chip tăng lên, độ dài đường cấp nguồn diesilicon tăng lên, làm điện trở tăng gây cân đối điện áp cung cấp vùng chip Hơn đường nối dài cảm kháng ký sinh tăng theo làm áp cung cấp cho vùng bị sụt tức thời chip hoạt động tần số cao Những hiệu ứng làm chip hoạt động ổn định Do chip đưa nhiều đầu cấp nguồn để làm giảm hiệu ứng Phải có tụ decouling 0.1uF đặt gần chân cấp nguồn (khi vẽ PCB phải đặt gần tốt): Mặt dù dịng tiêu thụ trung bình nhỏ hoạt động tần số cao, dòng điện tức thời mà chip cần (để nạp cổng MOSFET) lớn Do di/dt lớn nên ảnh hưởng điện cảm đường mạch lớn Ngoài ổn áp tuyến tính điều khơng thể cung cấp dịng điện cho chip Vì bạn phải cần tụ điện để tích điện tạm thời chu kỳ chip khơng hoạt động xả dịng để cung cấp cho chip chu kỳ hoạt động Các tụ điện phải: ESR thấp để có khả xả dòng lớn Tụ gốm (tụ bi) 0.1uF phù hợp Đơi mắc song song thêm tụ 0.01uF thật gần chân nguồn chip để giảm điện cảm, điện trở đường mạch Khi lắp tụ decouling, đường cấp nguồn có nhiễu tần số cao nạp xả tụ cộng thêm nhiễu từ nguồn khác cần phải triệt tiêu Nhưng vấn để phức tạp: Sử dụng LDO tốt , dòng tĩnh thấp, phải xài 7805, với loại cần có 0.1uF sát chân output để tránh bị dao động Tăng kích thướng đường nguồn để giảm điện cảm Đặt rải rác tụ 10uF(low ESR) đường cấp nguồn Nếu phải dùng tải cảm relay, motor, dùng chung nguồn, nên đường mạch Vss – Vdd riêng Dủng diode schottky(1N5817, 1N5822…) thay loại nắn dòng (1N4001, 1N4007…) để dập dòng cảm ứng tải cảm Có số linh kiện gọi tranzorbs, sidactor để dập dòng cảm ứng Đặt thạch anh sát gần với PIC: Khi thiết kế PCB, nên đặt thạch anh gần với PIC, khoảng cách từ chân OSCI đến chân thạch anh phải ngắn tốt, dao động vào chân này, xa nhiễu gây ổn định cho PIC 10 Giáo trình thí nghiệm vi điều khiển ứng dụng Dạng if-else : if()câu lệnh ; else câu lệnh 2; Nếu câu lệnh thực , câu lệnh không thực Nếu sai câu lệnh không thực , câu lệnh thực Quy ước số = false , số khác khơng = true Ví dụ : char a,b; a=1;b=5; if(a==1) a=5 else b=6; Kết : a=5 , b=5 Nếu câu lệnh có từ câu lệnh trở lên ta phải đặt chúng dấu ngoặc {} if() {câu lệnh 1; câu lệnh ; câu lệnh ;} else {câu lệnh ; câu lệnh 5;} Ví dụ : char a,b c=1 ; b=5; if(a==1) { a=5; b=6; } else b=3; 93 Giáo trình thí nghiệm vi điều khiển ứng dụng Kết : a=5 , b=6 Chú ý : char a,b; a=1;b=5; if(a==1) a=5; b=6; else b=3; Kết : biên dịch báo lỗi Tốn tử “if-else” thay tốn tử “?” (điều kiện)?câu lệnh 1: câu lệnh 2; Nếu điều kiện = true câu lệnh thực Nếu điều kiện = false câu lệnh thực 13.Toán tử lựa chọn : Khác với câu lệnh if-else cho lựa chọn hai thuộc tính , switch – case cho lựa chọn vào thuộc tính switch() { case 1: câu lệnh 1: break; case : câu lệnh ; break ; default : câu lệnh n ; } 94 Giáo trình thí nghiệm vi điều khiển ứng dụng Nếu biểu thức = câu lệnh thực Nếu biểu thức = câu lệnh thực Nếu biểu thức != , câu lệnh n thực 14.Vòng lặp: 14.1 while: while() { lệnh 1; lệnh 2; lệnh n ; } Nếu biểu thức điều kiện : lệnh , lệnh lệnh n thực , sau quay lại kiểm tra biểu thức điều kiện Nếu biểu thức điều kiện sai lệnh 1, .lệnh n không thực , ngồi thực dịng lệnh lệnh while Ví dụ : char a=3; while(a