Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 71 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
71
Dung lượng
2,46 MB
Nội dung
THIẾTKẾHỆTHỐNGNHÚNG MỤC LỤC MỤC LỤC DANH MỤC HÌNH VẼ Bài TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC 1.1 1.2 Giới thiệu tổng quan Pic Kiến trúc Pic 1.2.1 Cấu trúc PIC 1.2.2 RISC CISC 1.3 Vi điều khiển PIC 16F877A 1.3.1 Sơ đồ chân kiểu đóng vỏ 1.3.2 Sơ đồi khối 1.3.3 Một số đặc điểm 1.3.4 So sánh với vi điều khiển họ 8051 10 Bài 11 TỔNG QUAN VỀ LẬP TRÌNH NHÚNG TRÊN PIC 11 2.1 Ngôn ngữ lập trình trình biên dịch 11 2.1.1 Trên hệ điều hành window 11 2.1.2 Trên hệ điều hành Linux 12 2.1.3 Các mạch nạp mạch gỡ rối chương trình 12 2.2 Lập trình PIC với CCS 15 2.2.1 Tổng quan CCS 15 2.2.2 Tạo PROJECT CCS 16 2.3 Biến, hàm, cấu trúc lệnh thị tiền xử lý 23 2.3.1 Biến, hằng, hàm cấu trúc lệnh 23 2.4 Mẫu chương trình cho lập trình CCS 26 Bài 29 LẬP TRÌNH VÀO RA SỐ 29 3.1 Các hàm xử lý bit phép toán 29 3.1.1 3.1.2 3.1.3 Hàm Shift_left, Shift_right 29 Hàm Bit_set, Bit_clear 29 Hàm Bit_test 29 3.1.4 3.1.5 Hàm Swap 30 Hàm Make8 30 3.1.6 3.1.7 Hàm Make16 30 Make32 30 3.2 Các hàm vào 31 3.2.1 Output_low (pin), Output_high (pin) 31 3.2.2 3.2.3 3.2.4 Output_bit (pin, value) 31 Input (pin) 32 Output_X (value) 32 3.2.5 Input_X () 32 THIẾTKẾHỆTHỐNGNHÚNG 3.2.6 3.2.7 Port_B_pullups 32 Set_tris_X (value) 32 3.3 Lập trình vào với led đơn, led bàn phím 33 Bài 34 THỰC HÀNH: LẬP TRÌNH VÀO RA SỐ 34 Bài 34 LẬP TRÌNH VÀO RA TƯƠNG TỰ 34 5.1 Bộ chuyển đổi ADC DAC 34 5.1.1 5.1.2 Tổng quan 34 Độ phân giải 35 5.1.3 Điện áp tham chiếu 36 5.2 Bộ chuyển đổi ADC PIC 36 5.2.1 ADC PIC 16F877A 37 5.2.2 5.2.3 Cấu hình ADC CCS 39 Lập trình ứng dụng 42 Bài 44 THỰC HÀNH: LẬP TRÌNH VÀO RA TƯƠNG TỰ 44 Bài 44 LẬP TRÌNH VÀ XỬ LÝ NGẮT 44 7.1 Tổng quan ngắt PIC 16F877A 44 7.2 Khai báo sử dụng ngắt CCS 45 7.3 Ngắt thay đổi trạng thái chân PORTB 48 7.4 Chế độ Sleep 50 7.5 Watch Dog Timer 50 7.6 “Đánh thức” vi điều khiển 51 Bài 53 THẢO LUẬN LẬP TRÌNH XỬ LÝ NGẮT 53 Bài 53 THỰC HÀNH: LẬP TRÌNH NGẮT 53 Bài 10 53 TIMER TRONG PIC 16F877A 53 10.1 Timer 53 10.2 10.3 10.4 10.4.1 Timer 55 Timer 56 Khai báo Timer CCS 57 Các lệnh Timer0 57 10.4.2 Các lệnh Timer1 59 10.4.3 Các lệnh Timer2 59 10.5 Lập trình ứng dụng 60 Bài 11 61 THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER 61 Bài 12 62 THẢO LUẬN VỀ TIMER/COUNTER 62 Bài 13 62 THIẾTKẾHỆTHỐNGNHÚNG THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER (TIẾP) 62 Bài 14 62 LẬP TRÌNH TRUYỀN THÔNG 62 14.1 Tổng quan lập trình truyền thông 62 14.2 Chuẩn RS232 62 14.3 Lập trình ứng dụng 66 Bài 15 67 THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG 67 Bài 16 68 LẬP TRÌNH TRUYỀN THÔNG (tiếp) 68 16.1 Chuẩn I2C 68 16.2 Lập trình ứng dụng 69 Bài 17: 70 THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG (TIẾP) 70 Bài 18: 70 THẢO LUẬN VỀ LẬP TRÌNH TRUYỀN THÔNG 70 Bài 19 70 LẬP TRÌNH NÂNG CAO 70 19.1 GLCD 70 19.2 Thẻ nhớ 70 19.3 Ethernet 70 Bài 20: 70 THỰC HÀNH: LẬP TRÌNH NÂNG CAO 70 Bài 21: 70 BÀI TẬP, THẢO LUẬN TỔNG KẾT 70 TÀI LIỆU THAM KHẢO 71 THIẾTKẾHỆTHỐNGNHÚNG DANH MỤC HÌNH VẼ Hình 1: Kiến truc Harvard Von-Neumann Hình 2: Một số sơ đồ chân kiểu đóng vỏ cho PIC 16F87XA Hình 3: Sơ đồ khối vi điều khiển PIC 16F877A Hình 4: Trình biên dịch MPASM 11 Hình 5: Mạch nạp PIC Kit PIC Kit 13 Hình 6: MPLAB ICD3 - Công cụ nạp gỡ rối 14 Hình 7: MPLAB REAL ICE – In Circuit Emulator 15 Hình 8: Giao diện PICC 16 Hình 9: Cửa sổ Save As 17 Hình 10: Tab General 18 Hình 11: Tab Communications 18 Hình 12: Tab SPI andLCD 19 Hình 13: Tab Timer 20 Hình 14: Tab Analog 20 Hình 15: Tab Other 21 Hình 16: Tab Interrupts 22 Hình 17: Tab Driver 22 Hình 18: Mạch flash ADC với so sánh 35 Hình 19: Minh họa tín hiệu Analog digital hàm sin 36 Hình 20: Sơ đồ khối chuyển đổi ADC 38 Hình 21: Các cách lưu kết chuyển đổi ADC 38 Hình 22: Sơ đồ kết nối với vi điều khiển PIC 16F877 42 Hình 23: Sơ đồ logic ngắt PIC 16F877A 45 Hình 24: Ghép nối điều khiển LED đơn 46 Hình 25: Sơ đồ ghép nối xử lý PortB 49 Hình 26: Sơ đồ khối Timer0 54 Hình 27: Sơ đồ khối Timer1 55 Hình 28: Sơ đồ khối Timer2 57 Hình 29: Sơ đồ mạch ví dụ dùng Timer0 60 Hình 30: Hình ảnh giao diện DB9 DB25 63 Hình 31: Sơ đồ chân giao diện DB9 DB25 63 Hình 32: Sơ đồ khối vi mạch MAX232, MAX233 66 Hình 33: Sơ đồ ghép nối thiết bị chuẩn I2C 68 THIẾTKẾHỆTHỐNGNHÚNGĐỀCƯƠNG BÀI GIẢNG HỌC PHẦN THIẾTKẾHỆTHỐNGNHÚNG Bài TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC 1.1 Giới thiệu tổng quan Pic PIC bắt nguồn chữ viết tắt "Programmable Intelligent Computer" (Máy tính khả trình thông minh) sản phẩm hãng General Instrument đặt cho dòng sản phẩm họ PIC1650 PIC sử dụng tập lệnh RISC (Reduced Instructions Set Computer), với dòng PIC low-end (độ dài mã lệnh 12 bit, ví dụ: PIC12Cxxx) mid-range (độ dài mã lệnh 14 bit, ví dụ: PIC16Fxxxx), tập lệnh bao gồm khoảng 35 lệnh, 70 lệnh dòng PIC high-end (độ dài mã lệnh 16 bit, ví dụ: PIC18Fxxxx) Tập lệnh bao gồm lệnh tính toán ghi, với số, vị trí nhớ, có lệnh điều kiện, lệnh nhảy/gọi hàm, lệnh để quay trở về, có tính phần cứng khác ngắt sleep (chế độ hoạt động tiết kiện điện) Microchip cung cấp môi trường lập trình MPLAB, bao gồm phần mềm mô trình dịch ASM Các dòng Pic phân chia theo loại: - Vi điều khiển bit: Pic10xxxx, Pic 12xxxx, Pic 14xxxx, Pic 16xxxx, Pic 17xxxx, Pic 18xxxx - Vi điều khiển 16 bit: Điển hình Pic 24, dsPIC30, dsPIC33F - Vi điều khiển 32 bit: PIC 32 Hiện có nhiều dòng PIC có nhiều khác biệt phần cứng, điểm qua vài nét sau: - FLASH ROM tuỳ chọn tùy theo loại chip - Các cổng Xuất/Nhập (I/O ports) (mức logic thường từ 0V đến 5V, ứng với logic logic 1) - 8/16 Bit Timer - Các chuẩn giao Tiếp Ngoại Vi Nối Tiếp Đồng bộ/Không đồng USART, AUSART, EUSARTs - Bộ chuyển đổi ADC Analog-to-Digital Converters, 8, 10/12 bit - Bộ so sánh điện áp (Voltage Comparators) - Các module Capture/Compare/PWM - MSSP Peripheral dùng cho giao tiếp I2C, SPI, I²S THIẾTKẾHỆTHỐNGNHÚNG 1.2 - Bộ nhớ nội EEPROM - ghi/xoá lên tới triệu lần - FLASH (dùng cho nhớ chương trình) ghi/xóa 10 000 lần (tiêu chuẩn) - Hỗ trợ giao tiếp USB - Hỗ trợ điều khiển Ethernet - Hỗ trợ giao tiếp CAN - Một số dòng có tích hợp RF (PIC16F639, rfPIC) - DSP tính xử lý tín hiệu số (dsPIC) Kiến trúc Pic 1.2.1 Cấu trúc PIC Cấu trúc phần cứng vi điều khiển thiếtkế theo hai dạng kiến trúc: Kiến trúc Von Neuman kiến trúc Harvard Data memory CPU Program memory Harvard CPU Program and Data memory Von-Neumann Hình 1: Kiến truc Harvard Von-Neumann Tổ chức phần cứng Pic thiếtkế theo kiến trúc Harvard Điểm khác biệt kiến trúc Harvard kiến trúc Von-Neumann cấu trúc nhớ liệu nhớ chương trình Đối với kiến trúc Von-Neumann, nhớ liệu nhớ chương trình nằm chung nhớ, ta tổ chức, cân đối cách linh hoạt nhớ chương trình nhớ liệu Tuy nhiên điều có ý nghĩa tốc độ xử lý CPU phải cao, với cấu trúc đó, thời điểm CPU tương tác với nhớ liệu nhớ chương trình Như nói kiến trúc Von-Neumann không thích hợp với cấu trúc vi điều khiển Đối với kiến truc Harvard, nhớ liệu nhớ chương trình tách thành hai nhớ riêng biệt Do thời điểm CPU tương tác với hai nhớ, tốc độ xử lý vi điều khiển cải thiện đáng kể Một điểm cần lưu ý tập lệnh kiến trúc Harvard tối ưu theo yêu cầu kiến trúc vi điều mà không phụ thuộc vào cấu trúc liệu Ví dụ, vi điều khiển dòng 16F, độ dài lện 14 bit (trong liệu tổ THIẾTKẾHỆTHỐNGNHÚNG chức thành byte), kiến truc Von-Neumann, độ dài lệnh bội số byte (do liệu tổ chức thành byte) 1.2.2 RISC CISC Như trình bày, kiến truc Harvard kiến trúc so với kiến trục VonNeumann Khái ni Lệnh hình thành nhằm cải tiến tốc độ thực thi vi điều khiển Qua việc tách rời nhớ liệu nhớ chương trình, bus chương trình bus liệu, CPU lúc truy xuất nhớ chương trình nhớ liệu, giúp tăng tốc độ xử lý vi điều khiển lên gấp đôi Đồng thời cấu trúc lệnh không phụ thuộc vào cấu trúc liệu mà linh động điều chỉnh tùy theo khả tốc độ vi điều khiển Và để cải thiện tốc độ thực thi lệnh, tập lệnh họ vi điều khiển PIC thiếtkế cho chiều dài mã lệnh cố định (ví dụ với họ 16Fxxxx chiều dài mã lệnh 14 bit) cho phép thực thi lệnh chu kỳ xung clock (ngoại trừ số trường hợp đặc biệt lệnh nhảy, gọi chương trình con… cần hai chu kỳ xung đồng hồ) Điều có nghĩa tập lệnh vi điều khiển thuộc cấu trúc Harvard lệnh hơn, đơn giản ngắn để đáp ứng yêu cầu mà mã hóa lệnh lượng bit định Vi điều khiển tổ chức theo kiến trúc Harvard gọi vi điều khiển RISC (Reduced Instructions Set Computer) hay vi điều khiển có tập lệnh rút gọn Vi điều khiển thiếtkế theo kiến trúc Von-Neumann gọi vi điều khiển CISC (Complex Instructions Set Computer) hay vi điều khiển có tập lệnh phức tạp mã lệnh số cố định mà bội số bit 1.3 Vi điều khiển PIC 16F877A 1.3.1 Sơ đồ chân kiểu đóng vỏ THIẾTKẾHỆTHỐNGNHÚNG Hình 2: Một số sơ đồ chân kiểu đóng vỏ cho PIC 16F87XA Hình trình bày sơ đồ chân kiểu đóng vỏ Pic16F87XA Trong đó: - Kiểu đóng vỏ 40-Pin PDIP: Pic16F87XA đóng vỏ có 44 chân, kích thước lớn, chân cắm hàn mạch, thích hợp lắp đặt cho mạch có kích thước linh kiện lớn - Kiểu đóng vỏ 44-Pin PLCC: kiểu đóng vỏ kích thước IC nhỏ, có hàng chân xung quanh, chân ngắn, thích hợp cho lắp mạch với linh kiện dán - Kiểu đóng vỏ 44-Pin TQFP: gần tương tự kiểu đóng vỏ 44-Pin PLCC với kích thước chân dài hơn, dùng mạch lắp linh kiện dán Mặc dù đóng vỏ khác (kích thước lớn/nhỏ chênh lệch nhiều) song tính năng, khả hoạt động Pic không thay đổi THIẾTKẾHỆTHỐNGNHÚNG 1.3.2 Sơ đồi khối Hình 3: Sơ đồ khối vi điều khiển PIC 16F877A 1.3.3 Một số đặc điểm Đây vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit Mỗi lệnh thực thi chu kỳ xung clock Tốc độ hoạt động tối đa cho phép 20 MHz với chu kỳ lệnh 200ns Bộ nhớ chương trình 8Kx14 bit, nhớ liệu 368x8 (368 byte) RAM nhớ liệu EEPROM với dung lượng 256x8 (256 byte) Số PORT I/O với 33 pin I/O Các đặc tính ngoại vi bao gồm khối chức sau: THIẾTKẾHỆTHỐNGNHÚNG - Timer0: đếm bit với chia tần số bit - Timer1: đếm 16 bit với chia tần số, thực chức đếm dựa vào xung clock ngoại vi vi điều khiển hoạt động chế độ sleep - Timer2: đếm bit với chia tần số, postcaler - Hai Capture/so sánh/điều chế độ rông xung - Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI I2C - Chuẩn giao tiếp nối tiếp USART với bit địa - Cổng giao tiếp song song PSP (Parallel Slave Port) với chân điều khiển RD, WR, CS bên - Các đặc tính Analog: kênh chuyển đổi ADC 10 bit - Hai so sánh Bên cạnh vài đặc tính khác vi điều khiển như: - Bộ nhớ flash với khả ghi xóa 100 000 lần - Bộ nhớ EEPROM với khả ghi xóa 000 000 lần - Dữ liệu nhớ EEPROM lưu trữ 40 năm - Khả tự nạp chương trình với điều khiển phần mềm - Nạp chương trình mạch điện ICSP (In Circuit Serial Programming) - Watchdog Timer với dao động - Chức bảo mật mã chương trình - Chế độ Sleep - Có thể hoạt động với nhiều dạng Oscillator khác 1.3.4 So sánh với vi điều khiển họ 8051 - Về kiến trúc VXL - Tốc độ làm việc - Bộ nhớ chương trình, liệu, … - Đặc điểm lệnh - Các hỗ trợ vào số, vào tương tự - Hỗ trợ truyền thông - Xử lý thời gian/bộ đếm (timer/counter) - Các tính khác 10 THIẾTKẾHỆTHỐNGNHÚNG Hình 28: Sơ đồ khối Timer2 Timer2 hỗ trợ ghi PR2 Giá trị đếm ghi TMR2 tăng từ 00h đến giá trị chứa ghi PR2, sau reset 00h Khi reset ghi PR2 nhận giá trị mặc định FFh Ngõ Timer2 đưa qua chia tần số postscaler với mức chia từ 1:1 đến 1:16 Postscaler điều khiển bit T2OUTPS3:T2OUTPS0 Ngõ postscaler đóng vai trò định việc điều khiển cờ ngắt Ngoài ngõ Timer2 kết nối với khối SSP, Timer2 đóng vai trò tạo xung clock đồng cho khối giao tiếp SSP Các ghi liên quan đến Timer2 bao gồm: - INTCON (địa 0Bh, 8Bh, 10Bh, 18Bh) : cho phép toàn ngắt (GIE PEIE) - PIR1 (địa 0Ch) : chứa cờ ngắt Timer2 (TMR2IF) - PIE1 (địa chị 8Ch) : chứa bit điều khiển Timer2 (TMR2IE) - TMR2 (địa 11h) : chứa giá trị đếm Timer2 - T2CON (địa 12h) : xác lập thông số cho Timer2 10.4 Khai báo Timer CCS 10.4.1.Các lệnh Timer0 Chọn chế độ làm việc cho Setup_TIMER_0 (mode) ; Timer0 Set_TIMER0 (value) // hay set_RTCC Khởi tạo giá trị ban đầu cho Timer (value) 57 THIẾTKẾHỆTHỐNGNHÚNG Get_TIMER0 () ; // hay get_RTCC () Trả lại giá trị cho timer0 giá trị xung giá trị đếm Setup_COUNTERS (rtcc_state, ps_state) ; Trong mode hai constant (nếu dùng hai chèn dấu "|"ở giữa) định nghĩa file 16F877A h gồm: - RTCC_INTERNAL : chọn xung clock nội - RTCC_EXT_L_TO_H: chọn bit cạnh lên chân RA4 - RTCC_EXT_H_TO_L: chọn bit cạnh xuống chân RA4 - RTCC_DIV_2:chia prescaler 1:2 - RTCC_DIV_4 1:4 - RTCC_DIV_8 1:8 - RTCC_DIV_16 1:16 - RTCC_DIV_32 1:32 - RTCC_DIV_64 1:64 - RTCC_DIV_128 1:128 - RTCC_DIV_256 1:256 rtcc_state constant sau: - RTCC_INTERNAL - RTCC_EXT_L_TO_H - RTCC_EXT_H_TO_L ps_state constant sau: - RTCC_DIV_2 - RTCC_DIV_4 - RTCC_DIV_8 - RTCC_DIV_16 - RTCC_DIV_32 - RTCC_DIV_64 - RTCC_DIV_128 - RTCC_DIV_256 - WDT_18MS - WDT_36MS - WDT_72MS - WDT_144MS 58 THIẾTKẾHỆTHỐNGNHÚNG - WDT_288MS - WDT_576MS - WDT_1152MS - WDT_2304MS 10.4.2.Các lệnh Timer1 Chọn chế độ làm việc cho Setup_TIMER_1 (mode) ; Timer0 Khởi tạo giá trị ban đầu cho Set_TIMER1 (value) ; Timer (16 bit) Get_TIMER1 () ; // hay get_RTCC () Trả lại giá trị Timer1 giá trị xung giá trị đếm mode gồm (có thể kết hợp dấu "|") : - T1_DISABLED: tắt Timer1 - T1_INTERNAL: xung clock nội (Fosc/4) - T1_EXTERNAL: xung clock chân RC0 - T1_EXTERNAL_SYNC: xung clock đồng - T1_CLK_OUT - T1_DIV_BY_1 - T1_DIV_BY_2 - T1_DIV_BY_4 - T1_DIV_BY_8 10.4.3.Các lệnh Timer2 setup_TIMER_2 period, Chọn chế độ làm việc cho (mode, postscale) Timer0 Set_TIMER2 (value) ; Khởi tạo giá trị ban đầu cho Timer Get_TIMER2 () ; // hay get_RTCC () 59 Trả lại giá trị Timer THIẾTKẾHỆTHỐNGNHÚNG giá trị xung giá trị đếm Với mode gồm (có thể kết hợp dấu "|") : - T2_DISABLED - T2_DIV_BY_1 - T2_DIV_BY_4 - T2_DIV_BY_16 period số nguyên từ 0-255, xác định giá trị xung reset postscale số nguyên 1-16, xác định reset lần trước ngắt 10.5 Lập trình ứng dụng Ví dụ 1: Cho sơ đồ kết nối hình vẽ: Hình 29: Sơ đồ mạch ví dụ dùng Timer0 Lập trình cho led sáng từ trái sang phải sau khoảng thời gian định (sử dụng timer0) Code: #include #include #device *=16 adc=8 #use delay (clock=4000000) // #use fast_io (b) // dung voi cac lenh nhu output_low nhanh hon binh thuong 60 THIẾTKẾHỆTHỐNGNHÚNG #byte portb=0x06 #byte portd=0x08 int16 count; int8 a; // chuong trinh ngat ngat timer0 #int_timer0 // cho phep vao ngat timer0 void interrupt_timer0 () { ++count; if (count==2000) //2000*500=1s {count=0; rotate_left (&a, 1) ; //xuay bien a lan bit } } // chuong trinh chinh void main () { set_tris_d (0) ; //cong B la cong xuat enable_interrupts (int_timer0) ; //cho phep ngat timer0 hoat dong setup_timer_0 (rtcc_internal|rtcc_div_2) ; //chon xung clock noi va chia tan trc 1:2 enable_interrupts (global) ; //cho phep tat ca ngat hoat dong set_timer0 (6) ; //T_dinhthoi = 2* (256 - 6) *1us = 500us a=0x01; while (true) { portd=a; } } Bài 11 THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER Chi tiết theo tập thực hành 61 THIẾTKẾHỆTHỐNGNHÚNG Bài 12 THẢO LUẬN VỀ TIMER/COUNTER - Timer - Counter - Phương pháp lập trình Timer/Counter Pic Bài 13 THỰC HÀNH: LẬP TRÌNH TIMER/COUNTER (TIẾP) Chi tiết theo tập thực hành Bài 14 LẬP TRÌNH TRUYỀN THÔNG 14.1 Tổng quan lập trình truyền thông Vi điều khiển PIC 16F877A hỗ trợ nhiều chuẩn truyền thông khác chuẩn nối tiếp USART giao tiếp với máy tính theo chuẩn RS232, PSP (chuẩn song song), SPI, I2C - USART: chuẩn truyền thông nối tiếp không đồng hoàn toàn tương thích với giao tiếp máy tính qua RS232 Do chuẩn điện áp sử dụng PIC 16F877A TTL nên để ghép nối với máy tính thiết bị khác sử dụng chuẩn RS232 cần có chuyển đổi điện áp, ví dụ IC MAX232 USART mặc định sử dụng chân C6 C7 để truyền thông - PSP: với giao tiếp này, Pic sử dụng cổng D với vai trò cổng truyền nhận song song bit Với PSP cho phép PIC giao tiếp trực tiếp với VĐK khác bus liệu bit Các chân RD, CS, WR giúp điều khiển đường truyền, chế độ hoạt động PSP không hỗ trợ PIC16F873A, PIC16F876A - Truyền thông nối tiếp đồng bộ: hỗ trợ chế độ SPI I2C 14.2 Chuẩn RS232 Với USART cho phép PIC 16F877A giao tiếp với máy tính theo chuẩn RS232 Đặc điểm RS232: Giao diện: 62 THIẾTKẾHỆTHỐNGNHÚNG Hình 30: Hình ảnh giao diện DB9 DB25 Giao diện COM sử dụng cổng nối chân 25 chân Cổng nối 25 chân có số chân sử dụng Thông dụng cổng nối chân Hình 31: Sơ đồ chân giao diện DB9 DB25 Giao diện công dụng chân thể bảng sau: Sơ đồ chuyển đổi, ghép nối giao diện chân giao diện 25 chân: 63 THIẾTKẾHỆTHỐNGNHÚNG Các kiểu ghép nối truyền thông cổng RS232: Điện áp sử dụng truyền thông RS232 bao gồm mức điện áp âm dương (không tương thích với mức logic TTL CMOS) Số "0" biểu diện mức điện áp +5V số "1" biểu diễn mức đienẹ áp -5V Giải điện áp sử dụng RS232 thể bảng sau: 64 THIẾTKẾHỆTHỐNGNHÚNG Các chip giao tiếp, hỗ trợ chuyển đổi mức logic TTL sang mức điện áp thích hợp cổng RS232, sử dụng giao tiếp với VĐK Pic: MAX232, MAX233, 65 THIẾTKẾHỆTHỐNGNHÚNG Hình 32: Sơ đồ khối vi mạch MAX232, MAX233 Ghép nối pic với máy tính qua RS232: - Sử dụng phương pháp truyền thông không điều khiển luồng: dùng chân: TX (truyền), RX (nhận), Ground (chung-nối đất) - Ghép nối thông qua IC chuyển điện áp MAX232 14.3 Lập trình ứng dụng Để lập trình truyền thông nối tiếp Pic ta cần thực số thiết lập sau: - Sử dụng thị: #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) Trong đó: tham số thứ tốc độ truyền, thứ sử dụng kiểu kiểm tra chẵn lẻ gì, thứ chân truyền đi, thứ chân nhận về, thứ số bit liệu truyền - Gửi liệu: CCS sử dụng hàm PutC(), Putchar(), Printf() - Nhận liệu: CCS dùng hàm GetC(), Getchar() - Thiết lập cấu hình bằng: setup_uart(baud, stream) Ví dụ: printf("Continue (Y,N)?"); { answer=getch(); 66 THIẾTKẾHỆTHỐNGNHÚNG }while(answer!='Y' && answer!='N'); #use rs232(baud=9600,xmit=pin_c6, rcv=pin_c7,stream=HOSTPC) #use rs232(baud=1200,xmit=pin_b1, rcv=pin_b0,stream=GPS) #use rs232(baud=9600,xmit=pin_b3, stream=DEBUG) while(TRUE) { c=fgetc(GPS); fputc(c,HOSTPC); if(c==13) fprintf(DEBUG,"Got a CR\r\n"); } Bài 15 THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG Chi tiết theo tập thực hành 67 THIẾTKẾHỆTHỐNGNHÚNG Bài 16 LẬP TRÌNH TRUYỀN THÔNG (tiếp) 16.1 Chuẩn I2C Vi điều khiển PIC 16F877A hỗ trợ nhiều chuẩn truyền thông nối tiếp đồng theo chế độ: SPI, I2C Một giao tiếp I2C gồm có dây: Serial Data (SDA) Serial Clock (SCL) SDA đường truyền liệu hướng, SCL đường truyền xung đồng hồ the o hướng Như hình vẽ , thiết bị ngoại vi kết nối vào đường I2C chân SDA nối với dây SDA bus, chân SCL nối với dây SCL Hình 33: Sơ đồ ghép nối thiết bị chuẩn I2C Mỗi dây SDA hay SCL nối với điện áp dương nguồn cấp thông qua điện trở kéo lên (pull‐up resistor) Sự cần thiết điện trở kéo chân giao tiếp I2C thiết bị ngoại vi thường dạng cực máng hở (open‐drain or open‐collector) Giá trị điện trở khác tùy vào thiết bị chuẩn giao tiếp, thường dao động khoảng 1KΩ đến 4.7KΩ Trở lại với hình trên, ta thấy có nhiều thiết bị (ICs) kết nối vào bus I2C, nhiên không xảy chuyện nhầm lẫn thiết bị, thiết bị nhận địa với quan hệ chủ/tớ tồn suốt thời gian kết nối Mỗi thiết bị hoạt đông thiết bị nhận liệu hay vừa truyền vừa nhận Hoạt động truyền hay nhận tùy thuộc vào việc thiết bị chủ (master) hay tớ (slave) Một thiết bị hay IC kết nối với bus I2C, địa (duy nhất) để phân biệt, cấu hình thiết bị chủ (master) hay tớ (slave) Tại lại có phân biệt ? Đó bus I2C quyền điều khiển thuộc thiết bị chủ (master) Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, hai thiết bị chủ/tớ giao tiếp thiết bị chủ có nhiệm vụ tạo xung đồng hồ quản lý địa thiết bị tớ suốt trình giao tiếp Thiết bị chủ giữ vai trò chủ động, thiết bị tớ giữ vai trò bị động viêc giao tiếp 68 THIẾTKẾHỆTHỐNGNHÚNG Về liệu truyền bus I2C, bus I2C chuẩn truyền 8‐bit liệu có hướng đường truyền với tốc độ 100Kbits/s – Chế độ chuẩn (Standard mode) Tốc độ truyền lên tới 400Kbits/s – Chế độ nhanh (Fast mode) cao 3,4Mbits/s – Chế độ cao tốc (High‐speed mode) Một bus I2C hoạt động nhiều chế độ khác nhau: - Một chủ tớ (one master – one slave) - Một chủ nhiều tớ (one master – multi slave) - Nhiều chủ nhiều tớ (Multi master – multi slave) Dù chế độ nào, giao tiếp I2C dựa vào quan hệ chủ/tớ Giả thiếtthiết bị A muốn gửi liệu đến thiết bị B, trình thực sau: ‐ Thiết bị A (Chủ) xác định địa thiết bị B (tớ), cừng với việc xác định địa chỉ, thiết bị A định việc đọc hay ghi vào thiết bị tớ ‐ Thiết bị A gửi liệu tới thiết bị B ‐ Thiết bị A kết thúc trình truyền liệu Khi A muốn nhận liệu từ B, trình diễn trên, khác A nhận liệu từ B Trong giao tiếp này, A chủ B tớ 16.2 Lập trình ứng dụng Để lập trình I2C Pic (CCS) trước hết khai báo sử dụng I2C: #use I2C(master, sda=PIN_B0, scl=PIN_B1) #use I2C(slave,sda=PIN_C4,scl=PIN_C3, address=0xa0,FORCE_HW) #use I2C(master, scl=PIN_B0, sda=PIN_B1, fast=450000) Khởi tạo chế độ truyền thông I2C: i2c_start() i2c_start(stream) i2c_start(stream, restart) Đọc liệu bằng: data = i2c_read(); data = i2c_read(stream); data = i2c_read(stream, ack); Ghi liệu bằng: i2c_write (data) i2c_write (stream, data) 69 THIẾTKẾHỆTHỐNGNHÚNG Bài 17: THỰC HÀNH: LẬP TRÌNH TRUYỀN THÔNG (TIẾP) Chi tiết theo tập thực hành Bài 18: THẢO LUẬN VỀ LẬP TRÌNH TRUYỀN THÔNG 18.1 Chuẩn giao tiếp MSSP (Master Synchronous Serial Port) 18.2 Chuẩn giao tiếp SPI (Serial Pheripheral Interface) Bài 19 LẬP TRÌNH NÂNG CAO 19.1 GLCD Sinh viên nghiên cứu, báo cáo theo nhóm 19.2 Thẻ nhớ Sinh viên nghiên cứu, báo cáo theo nhóm 19.3 Ethernet Sinh viên nghiên cứu, báo cáo theo nhóm Bài 20: THỰC HÀNH: LẬP TRÌNH NÂNG CAO Chi tiết theo tập thực hành Bài 21: BÀI TẬP, THẢO LUẬN TỔNG KẾT Giải đáp, chưa tập Thảo luận Tổng kết nội dung học phần 70 THIẾTKẾHỆTHỐNGNHÚNG TÀI LIỆU THAM KHẢO [1] Arnold S Berger, Embedded Systems Design: An Introduction to Processes, Tools, and Techniques : CMC Books, 2002 [2] Ken Amold, Embedded Controller Hardware Design : Elsevier Science, 2004 [3] S PARAMESWARAN J HENKEL, Designing Embedded Processors : Springer, 2007 [4] Tim Wilmshurst, Designing Embedded Systems with PIC Microcontrollers Principles and applications : Elsevier Ltd, 2007 [5] Paolo Faraboschi, Cliff Young Joseph A Fisher, Embedded Computing : Elsevier Inc, 2005 [6] John Iovine, PIC Microcontroller Project Book : McGraw-Hill, 2000 [7] Jan Axelson, The Microcontroller Idea Book: Circuits, Programs, & Applications featuring the 8052-BASIC Microcontroller : Lakeview Research, 1997 [8] Paul Cevoli, Embedded FreeBSD Cookbook : Elsevier Science (USA), 2002 71 ... MAX232, MAX233 66 Hình 33: Sơ đồ ghép nối thiết bị chuẩn I2C 68 THIẾT KẾ HỆ THỐNG NHÚNG ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN THIẾT KẾ HỆ THỐNG NHÚNG Bài TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC 1.1... đếm (timer/counter) - Các tính khác 10 THIẾT KẾ HỆ THỐNG NHÚNG Bài TỔNG QUAN VỀ LẬP TRÌNH NHÚNG TRÊN PIC 2.1 Ngôn ngữ lập trình trình biên dịch 2.1.1 Trên hệ điều hành window a) Trình biên dịch... Interrupts Hình 17: Tab Driver 22 THIẾT KẾ HỆ THỐNG NHÚNG Sau bước chọn trên, ta nhấn OK để kết thúc trình tạo Project CCS, File ten_project c tạo ra, chứa khai báo cần thiết cho PIC Files ten_project